pixiebox 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.rspec +4 -0
- data/DOCKER_INFO.md +3 -0
- data/Gemfile +4 -0
- data/Guardfile +47 -0
- data/LICENSE.txt +21 -0
- data/README.md +146 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/pixiebox +5 -0
- data/bin/pixiebox_dev +10 -0
- data/bin/rake +17 -0
- data/bin/setup +8 -0
- data/lib/pixiebox.rb +88 -0
- data/lib/pixiebox/box.rb +31 -0
- data/lib/pixiebox/boxes/installer.rb +55 -0
- data/lib/pixiebox/boxes/manifest.rb +59 -0
- data/lib/pixiebox/cli.rb +214 -0
- data/lib/pixiebox/commands/add_box.rb +25 -0
- data/lib/pixiebox/commands/add_service.rb +27 -0
- data/lib/pixiebox/commands/build_service.rb +23 -0
- data/lib/pixiebox/commands/download_docker.rb +35 -0
- data/lib/pixiebox/commands/finish_install.rb +16 -0
- data/lib/pixiebox/commands/finish_uninstall.rb +14 -0
- data/lib/pixiebox/commands/get_root_permission.rb +14 -0
- data/lib/pixiebox/commands/initialize_project.rb +32 -0
- data/lib/pixiebox/commands/install_config.rb +17 -0
- data/lib/pixiebox/commands/install_docker.rb +55 -0
- data/lib/pixiebox/commands/list_boxes.rb +16 -0
- data/lib/pixiebox/commands/list_services.rb +16 -0
- data/lib/pixiebox/commands/reload_shell.rb +15 -0
- data/lib/pixiebox/commands/remove_service.rb +27 -0
- data/lib/pixiebox/commands/remove_setup_shell.rb +19 -0
- data/lib/pixiebox/commands/restart.rb +21 -0
- data/lib/pixiebox/commands/setup_shell.rb +18 -0
- data/lib/pixiebox/commands/ssh_instance.rb +27 -0
- data/lib/pixiebox/commands/start.rb +20 -0
- data/lib/pixiebox/commands/start_install.rb +14 -0
- data/lib/pixiebox/commands/start_uninstall.rb +16 -0
- data/lib/pixiebox/commands/stop.rb +20 -0
- data/lib/pixiebox/commands/update_packages.rb +46 -0
- data/lib/pixiebox/constants.rb +26 -0
- data/lib/pixiebox/dns.rb +8 -0
- data/lib/pixiebox/docker_compose/config.rb +59 -0
- data/lib/pixiebox/errors/pixiebox_error.rb +17 -0
- data/lib/pixiebox/handlers/stdout_handler.rb +179 -0
- data/lib/pixiebox/os/abstract.rb +40 -0
- data/lib/pixiebox/os/current_os.rb +15 -0
- data/lib/pixiebox/os/darwin.rb +20 -0
- data/lib/pixiebox/os/distro.rb +45 -0
- data/lib/pixiebox/os/linux.rb +21 -0
- data/lib/pixiebox/os/unsupported_os.rb +9 -0
- data/lib/pixiebox/project.rb +19 -0
- data/lib/pixiebox/service.rb +50 -0
- data/lib/pixiebox/services/installer.rb +41 -0
- data/lib/pixiebox/services/manifest.rb +50 -0
- data/lib/pixiebox/shell/bash.rb +18 -0
- data/lib/pixiebox/shell/ini_file.rb +38 -0
- data/lib/pixiebox/shell/startup_script.rb +53 -0
- data/lib/pixiebox/shell/zsh.rb +9 -0
- data/lib/pixiebox/system.rb +69 -0
- data/lib/pixiebox/utils/domain_event_publisher.rb +11 -0
- data/lib/pixiebox/utils/output.rb +105 -0
- data/lib/pixiebox/utils/packages.rb +35 -0
- data/lib/pixiebox/utils/progress_bar.rb +31 -0
- data/lib/pixiebox/utils/project.rb +55 -0
- data/lib/pixiebox/utils/shell.rb +18 -0
- data/lib/pixiebox/utils/spinner.rb +27 -0
- data/lib/pixiebox/utils/visitable.rb +9 -0
- data/lib/pixiebox/utils/visitor_by_os.rb +32 -0
- data/lib/runner.rb +51 -0
- data/pixiebox.gemspec +52 -0
- metadata +424 -0
@@ -0,0 +1,16 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class FinishInstall < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
publish_event :add_post_install_message, 'You should reload open shells to pick up shell changes'
|
6
|
+
publish_event :install_complete
|
7
|
+
publish_event :post_install_messages
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def visit_linux subject
|
12
|
+
visit_darwin subject
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class InitializeProject < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
raise Errors::PixieboxNotInstalled unless os.pixiebox_installed?
|
6
|
+
|
7
|
+
publish_event :project_initialize_start
|
8
|
+
|
9
|
+
# create project config_dir
|
10
|
+
TTY::File.create_dir project_config_dir
|
11
|
+
|
12
|
+
# create project ini
|
13
|
+
TTY::File.create_file "#{project_config_dir}/#{Pixiebox::PROJECT_INI}" do |content|
|
14
|
+
"[project]\nenabled=true\n"
|
15
|
+
end
|
16
|
+
|
17
|
+
publish_event :project_initialize_complete
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def visit_linux subject
|
22
|
+
visit_darwin subject
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
private
|
27
|
+
def project_config_dir
|
28
|
+
"#{os.current_dir}/#{Pixiebox::CONFIG_DIR}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class InstallConfig < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
publish_event :config_setup_start
|
6
|
+
|
7
|
+
TTY::File.create_dir os.config_dir
|
8
|
+
Shell::IniFile.get(os).install
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def visit_linux subject
|
13
|
+
visit_darwin subject
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class InstallDocker < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
unless os.docker_installed?
|
6
|
+
commands = [
|
7
|
+
"/usr/bin/hdiutil attach -noidme -nobrowse -quiet #{subject.os.docker_installer}",
|
8
|
+
"cp -R /Volumes/Docker/Docker.app /Applications",
|
9
|
+
"open -a Docker",
|
10
|
+
"/usr/bin/hdiutil unmount -quiet /Volumes/Docker"
|
11
|
+
]
|
12
|
+
|
13
|
+
publish_event :install_docker_start
|
14
|
+
|
15
|
+
commands.each do |command|
|
16
|
+
system(command)
|
17
|
+
end
|
18
|
+
|
19
|
+
publish_event :install_docker_complete
|
20
|
+
else
|
21
|
+
publish_event :docker_present, os.docker_version?
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
def visit_linux subject
|
27
|
+
unless os.docker_installed?
|
28
|
+
publish_event :install_docker_start
|
29
|
+
|
30
|
+
stream = open('https://get.docker.com')
|
31
|
+
|
32
|
+
IO.copy_stream( stream, 'get-docker.sh' )
|
33
|
+
|
34
|
+
commands = [
|
35
|
+
"sh get-docker.sh #{Pixiebox.output}",
|
36
|
+
"rm get-docker.sh",
|
37
|
+
"#{os.su} 'usermod -aG docker #{os.user}'"
|
38
|
+
]
|
39
|
+
|
40
|
+
commands.each do |command|
|
41
|
+
system(command)
|
42
|
+
end
|
43
|
+
|
44
|
+
publish_event :add_post_install_message, "If you would like to use Docker as a non-root user\nyou will have to log out and back in for this to take effect!"
|
45
|
+
|
46
|
+
publish_event :install_docker_complete
|
47
|
+
|
48
|
+
else
|
49
|
+
publish_event :docker_present, os.docker_version?
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class ListBoxes < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
boxes = Boxes::Manifest.new(os).list
|
6
|
+
|
7
|
+
publish_event :list_boxes, boxes
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def visit_linux subject
|
12
|
+
visit_darwin subject
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class ListServices < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
services = Services::Manifest.new(os).list
|
6
|
+
|
7
|
+
publish_event :list_services, services
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def visit_linux subject
|
12
|
+
visit_darwin subject
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class ReloadShell < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
publish_event :reload_shell
|
6
|
+
Utils::Shell.new(Os::CurrentOs.get).reload
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
def visit_linux subject
|
11
|
+
visit_darwin subject
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class RemoveService < Pixiebox::Utils::VisitorByOs
|
4
|
+
def initialize(type)
|
5
|
+
@type = type
|
6
|
+
end
|
7
|
+
|
8
|
+
def visit_darwin subject
|
9
|
+
publish_event :remove_service_start, type
|
10
|
+
|
11
|
+
raise Errors::ProjectNotInitialized unless os.project_initialized?
|
12
|
+
|
13
|
+
Services::Installer.new(os).uninstall(type)
|
14
|
+
|
15
|
+
publish_event :remove_service_completed, type
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def visit_linux subject
|
20
|
+
visit_darwin subject
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
attr_reader :type
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class RemoveSetupShell < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
publish_event :remove_shell_setup_start
|
6
|
+
|
7
|
+
TTY::File.remove_file os.config_dir, force: true
|
8
|
+
Shell::StartupScript.get(os).uninstall_extensions
|
9
|
+
|
10
|
+
publish_event :remove_shell_setup_complete
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
def visit_linux subject
|
15
|
+
visit_darwin subject
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class Restart < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
raise Errors::ProjectNotInitialized unless os.project_initialized?
|
6
|
+
|
7
|
+
if os.project_running?
|
8
|
+
System.new(Os::CurrentOs.get).stop
|
9
|
+
System.new(Os::CurrentOs.get).start
|
10
|
+
else
|
11
|
+
System.new(Os::CurrentOs.get).start
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
def visit_linux subject
|
17
|
+
visit_darwin subject
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class SetupShell < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
publish_event :shell_setup_start
|
6
|
+
|
7
|
+
Shell::StartupScript.get(os).install_extensions
|
8
|
+
|
9
|
+
publish_event :shell_setup_complete
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def visit_linux subject
|
14
|
+
visit_darwin subject
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class SshInstance < Pixiebox::Utils::VisitorByOs
|
4
|
+
def initialize(service)
|
5
|
+
@service = service
|
6
|
+
end
|
7
|
+
|
8
|
+
def visit_darwin subject
|
9
|
+
publish_event :opening_shell, service
|
10
|
+
|
11
|
+
raise Errors::ProjectNotInitialized unless os.project_initialized?
|
12
|
+
raise Errors::SystemDownError unless os.project_running?
|
13
|
+
|
14
|
+
system "bash", "-c", "docker-compose exec #{service} bash"
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def visit_linux subject
|
19
|
+
visit_darwin subject
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
private
|
24
|
+
attr_reader :service
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class Start < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
publish_event :starting
|
6
|
+
|
7
|
+
raise Errors::ProjectNotInitialized unless os.project_initialized?
|
8
|
+
|
9
|
+
system("docker-compose up -d #{Pixiebox.output}") or raise Errors::DockerError
|
10
|
+
|
11
|
+
publish_event :started
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def visit_linux subject
|
16
|
+
visit_darwin subject
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class StartUninstall < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
raise Errors::PixieboxNotInstalled unless os.pixiebox_installed?
|
6
|
+
|
7
|
+
publish_event :uninstall_started
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
def visit_linux subject
|
12
|
+
visit_darwin subject
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class Stop < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
publish_event :stopping
|
6
|
+
|
7
|
+
raise Errors::ProjectNotInitialized unless os.project_initialized?
|
8
|
+
|
9
|
+
system("docker-compose down #{Pixiebox.output}") or raise Errors::DockerError
|
10
|
+
|
11
|
+
publish_event :stopped
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
def visit_linux subject
|
16
|
+
visit_darwin subject
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Pixiebox
|
2
|
+
module Commands
|
3
|
+
class UpdatePackages < Pixiebox::Utils::VisitorByOs
|
4
|
+
def visit_darwin subject
|
5
|
+
raise Errors::PixieboxNotInstalled unless os.pixiebox_installed?
|
6
|
+
|
7
|
+
packages = Utils::Packages.new(os)
|
8
|
+
|
9
|
+
if packages.update?
|
10
|
+
publish_event :update_packages_start
|
11
|
+
|
12
|
+
filename = packages.download
|
13
|
+
|
14
|
+
system("rm -rf #{os.packages_dir}")
|
15
|
+
system("mkdir #{os.packages_dir}")
|
16
|
+
system("tar xvf #{filename} -C #{os.packages_dir} --strip-components=1 #{Pixiebox.output}")
|
17
|
+
|
18
|
+
Shell::IniFile.get(os)[:packages] = { version: packages.current_version, last_update: Time.now.to_i }
|
19
|
+
|
20
|
+
publish_event :update_packages_stop
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
def visit_linux subject
|
26
|
+
raise Errors::PixieboxNotInstalled unless os.pixiebox_installed?
|
27
|
+
|
28
|
+
packages = Utils::Packages.new(os)
|
29
|
+
|
30
|
+
if packages.update?
|
31
|
+
publish_event :update_packages_start
|
32
|
+
|
33
|
+
filename = packages.download
|
34
|
+
|
35
|
+
system("sudo rm -rf #{os.packages_dir}")
|
36
|
+
system("sudo mkdir #{os.packages_dir}")
|
37
|
+
system("sudo tar xvf #{filename} -C #{os.packages_dir} --strip-components=1 #{Pixiebox.output}")
|
38
|
+
|
39
|
+
Shell::IniFile.get(os)[:packages] = { version: packages.current_version, last_update: Time.now.to_i }
|
40
|
+
|
41
|
+
publish_event :update_packages_stop
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|