smartmachine 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7216722bfdaa3eefae5c9de4eaa5b21c684b281226a917923ba3d09801471bc8
4
- data.tar.gz: 1b9e007c73ec297eb4c27d61de76e21ea612f81e4252a65f18a835f8ed1c2326
3
+ metadata.gz: ec43240b9b3682f0385c64fc4d6b53954efafd1a1204d74ac27f65103c67d52a
4
+ data.tar.gz: a097bb7e4fcf21d7abfc8ff93877d5eb8b1d29ad53d0b10055d9cd1d60538c0c
5
5
  SHA512:
6
- metadata.gz: 1e5ebde0903f967e19f36d238e767ae189de377ff3c404adc721b2f28c588a51a9165b38938098bb2c533c9320e7dc0188d91f2cb0a01848b3f789e52adc8866
7
- data.tar.gz: 9b70003e202c55ae5f85ef1866b43804bfd226ed853ad01d99fdf2b9df66d457912f17959f6ed32df3998ddb2159b5720049cf0ea10668955fba7189c3ce7397
6
+ metadata.gz: 80821ca3d3f5871d794691d18d1e1530a8658c6ba4fbf4dfe9189c0d69e69d7f41889b5e24a7506c47857ca8911f56b763585a364939551392eb9414cda9517c
7
+ data.tar.gz: 8e807663aeb5b9c257aa3b3c2e90445c9b20586fcd6425ede2a2f974de2e1e50a95778d4094581febdec965c9ae2642cc4c1e9b6fe6342c2c4e29c0e4f10d868
@@ -4,6 +4,7 @@ require 'smart_machine/commands/grid_commands/minio'
4
4
  require 'smart_machine/commands/grid_commands/mysql'
5
5
  require 'smart_machine/commands/grid_commands/nextcloud'
6
6
  require 'smart_machine/commands/grid_commands/nginx'
7
+ require 'smart_machine/commands/grid_commands/phpmyadmin'
7
8
  require 'smart_machine/commands/grid_commands/prereceiver'
8
9
  require 'smart_machine/commands/grid_commands/redis'
9
10
  require 'smart_machine/commands/grid_commands/terminal'
@@ -28,6 +29,9 @@ module SmartMachine
28
29
  desc "nginx", "Run nginx grid commands"
29
30
  subcommand "nginx", GridCommands::Nginx
30
31
 
32
+ desc "phpmyadmin", "Run phpmyadmin grid commands"
33
+ subcommand "phpmyadmin", GridCommands::Phpmyadmin
34
+
31
35
  desc "prereceiver", "Run prereceiver grid commands"
32
36
  subcommand "prereceiver", GridCommands::Prereceiver
33
37
 
@@ -0,0 +1,65 @@
1
+ module SmartMachine
2
+ module Commands
3
+ module GridCommands
4
+ class Phpmyadmin < SubThor
5
+ include Utilities
6
+
7
+ desc "up", "Take UP the phpmyadmin grid"
8
+ option :name, type: :string
9
+ def up
10
+ inside_machine_dir do
11
+ with_docker_running do
12
+ machine = SmartMachine::Machine.new
13
+ name_option = options[:name] ? " --name=#{options[:name]}" : ""
14
+ machine.run_on_machine commands: "smartengine grid phpmyadmin uper#{name_option}"
15
+ end
16
+ end
17
+ end
18
+
19
+ desc "down", "Take DOWN the phpmyadmin grid"
20
+ option :name, type: :string
21
+ def down
22
+ inside_machine_dir do
23
+ with_docker_running do
24
+ machine = SmartMachine::Machine.new
25
+ name_option = options[:name] ? " --name=#{options[:name]}" : ""
26
+ machine.run_on_machine commands: "smartengine grid phpmyadmin downer#{name_option}"
27
+ end
28
+ end
29
+ end
30
+
31
+ desc "uper", "Phpmyadmin grid uper", hide: true
32
+ option :name, type: :string
33
+ def uper
34
+ inside_engine_machine_dir do
35
+ if options[:name]
36
+ phpmyadmin = SmartMachine::Grids::Phpmyadmin.new(name: options[:name])
37
+ phpmyadmin.uper
38
+ else
39
+ SmartMachine.config.grids.phpmyadmin.each do |name, config|
40
+ phpmyadmin = SmartMachine::Grids::Phpmyadmin.new(name: name.to_s)
41
+ phpmyadmin.uper
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ desc "downer", "Phpmyadmin grid downer", hide: true
48
+ option :name, type: :string
49
+ def downer
50
+ inside_engine_machine_dir do
51
+ if options[:name]
52
+ phpmyadmin = SmartMachine::Grids::Phpmyadmin.new(name: options[:name])
53
+ phpmyadmin.downer
54
+ else
55
+ SmartMachine.config.grids.phpmyadmin.each do |name, config|
56
+ phpmyadmin = SmartMachine::Grids::Phpmyadmin.new(name: name.to_s)
57
+ phpmyadmin.downer
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,3 +1,6 @@
1
+ require 'smart_machine/commands/machine_commands/sub_thor'
2
+ require 'smart_machine/commands/machine_commands/network'
3
+
1
4
  module SmartMachine
2
5
  module Commands
3
6
  class Machine < Thor
@@ -27,6 +30,9 @@ module SmartMachine
27
30
  machine.run_on_machine(commands: "#{args.join(' ')}")
28
31
  end
29
32
  end
33
+
34
+ desc "network", "Run machine network commands"
35
+ subcommand "network", MachineCommands::Network
30
36
  end
31
37
  end
32
38
  end
@@ -0,0 +1,65 @@
1
+ module SmartMachine
2
+ module Commands
3
+ module MachineCommands
4
+ class Network < SubThor
5
+ include Utilities
6
+
7
+ desc "up", "Take UP the machine network"
8
+ option :name, type: :string
9
+ def up
10
+ inside_machine_dir do
11
+ with_docker_running do
12
+ machine = SmartMachine::Machine.new
13
+ name_option = options[:name] ? " --name=#{options[:name]}" : ""
14
+ machine.run_on_machine commands: "smartengine machine network uper#{name_option}"
15
+ end
16
+ end
17
+ end
18
+
19
+ desc "down", "Take DOWN the machine network"
20
+ option :name, type: :string
21
+ def down
22
+ inside_machine_dir do
23
+ with_docker_running do
24
+ machine = SmartMachine::Machine.new
25
+ name_option = options[:name] ? " --name=#{options[:name]}" : ""
26
+ machine.run_on_machine commands: "smartengine machine network downer#{name_option}"
27
+ end
28
+ end
29
+ end
30
+
31
+ desc "uper", "Machine network uper", hide: true
32
+ option :name, type: :string
33
+ def uper
34
+ inside_engine_machine_dir do
35
+ if options[:name]
36
+ network = SmartMachine::Machines::Network.new(name: options[:name])
37
+ network.uper
38
+ else
39
+ SmartMachine.config.network.each do |name, config|
40
+ network = SmartMachine::Machines::Network.new(name: name.to_s)
41
+ network.uper
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ desc "downer", "Machine network downer", hide: true
48
+ option :name, type: :string
49
+ def downer
50
+ inside_engine_machine_dir do
51
+ if options[:name]
52
+ network = SmartMachine::Machines::Network.new(name: options[:name])
53
+ network.downer
54
+ else
55
+ SmartMachine.config.network.each do |name, config|
56
+ network = SmartMachine::Machines::Network.new(name: name.to_s)
57
+ network.downer
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,15 @@
1
+ module SmartMachine
2
+ module Commands
3
+ module MachineCommands
4
+ class SubThor < Thor
5
+ def self.banner(command, namespace = nil, subcommand = false)
6
+ "#{basename} machine #{subcommand_prefix} #{command.usage}"
7
+ end
8
+
9
+ def self.subcommand_prefix
10
+ self.name.gsub(%r{.*::}, '').gsub(%r{^[A-Z]}) { |match| match[0].downcase }.gsub(%r{[A-Z]}) { |match| "-#{match[0].downcase}" }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -8,13 +8,13 @@ module SmartMachine
8
8
  end
9
9
 
10
10
  def config
11
- @config ||= OpenStruct.new(grids: grids)
11
+ @config ||= OpenStruct.new(grids: grids, network: network)
12
12
  end
13
13
 
14
14
  private
15
15
 
16
16
  def grids
17
- @grids ||= OpenStruct.new(elasticsearch: elasticsearch, minio: minio, mysql: mysql, nextcloud: nextcloud, prereceiver: prereceiver, redis: redis, terminal: terminal)
17
+ @grids ||= OpenStruct.new(elasticsearch: elasticsearch, minio: minio, mysql: mysql, nextcloud: nextcloud, phpmyadmin: phpmyadmin, prereceiver: prereceiver, redis: redis, terminal: terminal)
18
18
  end
19
19
 
20
20
  def elasticsearch
@@ -61,6 +61,17 @@ module SmartMachine
61
61
  end
62
62
  end
63
63
 
64
+ def phpmyadmin
65
+ # Once the SmartMachine.config assignments in smart_machine.rb file has been removed, then this file exist condition can be removed to ensure that config/phpmyadmin.yml always exists
66
+ if File.exist? "config/phpmyadmin.yml"
67
+ deserialize(IO.binread("config/phpmyadmin.yml")).deep_symbolize_keys
68
+ elsif File.exist? "#{File.expand_path('~')}/machine/config/phpmyadmin.yml"
69
+ deserialize(IO.binread("#{File.expand_path('~')}/machine/config/phpmyadmin.yml")).deep_symbolize_keys
70
+ else
71
+ {}
72
+ end
73
+ end
74
+
64
75
  def prereceiver
65
76
  # Once the SmartMachine.config assignments in smart_machine.rb file has been removed, then this file exist condition can be removed to ensure that config/prereceiver.yml always exists
66
77
  if File.exist? "config/prereceiver.yml"
@@ -94,6 +105,17 @@ module SmartMachine
94
105
  end
95
106
  end
96
107
 
108
+ def network
109
+ # Once the SmartMachine.config assignments in smart_machine.rb file has been removed, then this file exist condition can be removed to ensure that config/network.yml always exists
110
+ if File.exist? "config/network.yml"
111
+ deserialize(IO.binread("config/network.yml")).deep_symbolize_keys
112
+ elsif File.exist? "#{File.expand_path('~')}/machine/config/network.yml"
113
+ deserialize(IO.binread("#{File.expand_path('~')}/machine/config/network.yml")).deep_symbolize_keys
114
+ else
115
+ {}
116
+ end
117
+ end
118
+
97
119
  def deserialize(config)
98
120
  YAML.load(ERB.new(config).result).presence || {}
99
121
  end
@@ -6,6 +6,7 @@ module SmartMachine
6
6
  raise "mysql config for #{name} not found." unless config
7
7
 
8
8
  @port = config.dig(:port)
9
+ @networks = Array(config.dig(:networks))
9
10
  @root_password = config.dig(:root_password)
10
11
  @username = config.dig(:username)
11
12
  @password = config.dig(:password)
@@ -48,6 +49,9 @@ module SmartMachine
48
49
  puts "done"
49
50
  puts "-----> Starting container #{@name} ... "
50
51
  if system("docker start #{@name}", out: File::NULL)
52
+ @networks.each do |network|
53
+ raise "Error: Could not connect container: #{network} - #{@name}" unless system("docker network connect #{network} #{@name}", out: File::NULL)
54
+ end
51
55
  puts "done"
52
56
  else
53
57
  raise "Error: Could not start the created #{@name} container"
@@ -59,6 +63,10 @@ module SmartMachine
59
63
 
60
64
  # Stopping & Removing containers - in reverse order
61
65
  def downer
66
+ @networks.each do |network|
67
+ raise "Error: Could not disconnect container: #{network} - #{@name}" unless system("docker network disconnect #{network} #{@name}", out: File::NULL)
68
+ end
69
+
62
70
  puts "-----> Stopping container #{@name} ... "
63
71
  if system("docker stop '#{@name}'", out: File::NULL)
64
72
  puts "done"
@@ -0,0 +1,104 @@
1
+ module SmartMachine
2
+ class Grids
3
+ class Phpmyadmin < SmartMachine::Base
4
+ def initialize(name:)
5
+ config = SmartMachine.config.grids.phpmyadmin.dig(name.to_sym)
6
+ raise "phpmyadmin config for #{name} not found." unless config
7
+
8
+ @image = config.dig(:image)
9
+ @command = config.dig(:command)
10
+ @host = config.dig(:host)
11
+ @networks = Array(config.dig(:networks))
12
+
13
+ @pma_controlhost = config.dig(:pma_controlhost)
14
+ mysql_config = SmartMachine.config.grids.mysql.dig(@pma_controlhost&.to_sym)
15
+ raise "phpmyadmin | mysql config for #{@pma_controlhost} not found." unless mysql_config
16
+ @mysql_config_root_password = mysql_config.dig(:root_password)
17
+ @pma_controlport = mysql_config.dig(:port)
18
+ @pma_controluser = mysql_config.dig(:username)
19
+ @pma_controlpass = mysql_config.dig(:password)
20
+ @pma_pmadb = "phpmyadmin"
21
+
22
+ @name = name.to_s
23
+ @home_dir = File.expand_path('~')
24
+ end
25
+
26
+ def uper
27
+ raise "Error: Could not create container: #{@name}" unless system(command.compact.join(' '), out: File::NULL)
28
+ raise "Error: Could not start container: #{@name}" unless system("docker start #{@name}", out: File::NULL)
29
+ @networks.each do |network|
30
+ raise "Error: Could not connect container: #{network} - #{@name}" unless system("docker network connect #{network} #{@name}", out: File::NULL)
31
+ end
32
+
33
+ raise "Error: Could not setup database: #{@name}" unless system(command_db_setup.compact.join(' '), out: File::NULL)
34
+ raise "Error: Could not setup tables: #{@name}" unless system(command_db_tables_setup.compact.join(' '), out: File::NULL)
35
+
36
+ puts "Created, Started & Connected container: #{@name}"
37
+ end
38
+
39
+ def downer
40
+ @networks.each do |network|
41
+ raise "Error: Could not disconnect container: #{network} - #{@name}" unless system("docker network disconnect #{network} #{@name}", out: File::NULL)
42
+ end
43
+ raise "Error: Could not stop container: #{@name}" unless system("docker stop '#{@name}'", out: File::NULL)
44
+ raise "Error: Could not remove container: #{@name}" unless system("docker rm '#{@name}'", out: File::NULL)
45
+
46
+ puts "Disconnected, Stopped & Removed container: #{@name}"
47
+ end
48
+
49
+ private
50
+
51
+ def command
52
+ [
53
+ 'docker create',
54
+ "--name='#{@name}'",
55
+ "--env VIRTUAL_HOST=#{@host}",
56
+ "--env LETSENCRYPT_HOST=#{@host}",
57
+ "--env LETSENCRYPT_EMAIL=#{SmartMachine.config.sysadmin_email}",
58
+ '--env LETSENCRYPT_TEST=false',
59
+ "--env PMA_CONTROLHOST=#{@pma_controlhost}",
60
+ "--env PMA_CONTROLPORT=#{@pma_controlport}",
61
+ "--env PMA_CONTROLUSER=#{@pma_controluser}",
62
+ "--env PMA_CONTROLPASS=#{@pma_controlpass}",
63
+ "--env PMA_PMADB=#{@pma_pmadb}",
64
+ '--env PMA_QUERYHISTORYDB=true',
65
+ '--env HIDE_PHP_VERSION=true',
66
+ '--env PMA_ARBITRARY=1',
67
+ volumes,
68
+ "--restart='always'",
69
+ "--network='#{@networks.shift}'",
70
+ @image,
71
+ @command
72
+ ]
73
+ end
74
+
75
+ def volumes
76
+ volumes = []
77
+
78
+ if File.exist?("#{@home_dir}/machine/config/phpmyadmin/#{@name}/config.user.inc.php")
79
+ volumes.push("--volume='#{@home_dir}/smartmachine/config/phpmyadmin/#{@name}/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php'")
80
+ end
81
+
82
+ volumes.join(" ")
83
+ end
84
+
85
+ def command_db_setup
86
+ [
87
+ "docker exec -i #{@pma_controlhost}",
88
+ "bash -c \"exec mysql --defaults-extra-file=<(echo $'[client]\npassword='\"#{@mysql_config_root_password}\") -uroot --execute \\\"",
89
+ "CREATE DATABASE IF NOT EXISTS #{@pma_pmadb};",
90
+ "GRANT ALL PRIVILEGES ON #{@pma_pmadb}.* TO #{@pma_controluser}@'%';",
91
+ "\\\"\""
92
+ ]
93
+ end
94
+
95
+ def command_db_tables_setup
96
+ [
97
+ "docker cp #{@name}:/var/www/html/sql/create_tables.sql - | tar -xO |",
98
+ "docker exec -i #{@pma_controlhost} bash -c",
99
+ "\"exec mysql --defaults-extra-file=<(echo $'[client]\npassword='\"#{@mysql_config_root_password}\") -uroot\""
100
+ ]
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,58 +1,29 @@
1
- (custom-set-variables
2
- ;; custom-set-variables was added by Custom.
3
- ;; If you edit it by hand, you could mess it up, so be careful.
4
- ;; Your init file should contain only one such instance.
5
- ;; If there is more than one, they won't work right.
6
- '(package-selected-packages
7
- '(polymode ruby-electric ruby-electric-mode ruby-mode dockerfile-mode expand-region flycheck zenburn-theme multi-vterm vterm yaml-mode web-mode use-package undo-tree typescript-mode smartparens robe rbenv rainbow-delimiters projectile-rails osx-trash magit logview indent-guide diredfl dired-sidebar dired-narrow dired-git-info diff-hl company clipetty bundler)))
8
- (custom-set-faces
9
- ;; custom-set-faces was added by Custom.
10
- ;; If you edit it by hand, you could mess it up, so be careful.
11
- ;; Your init file should contain only one such instance.
12
- ;; If there is more than one, they won't work right.
13
- '(diff-hl-change ((t (:foreground "#f7ca88" :background "#f7ca88"))))
14
- '(diff-hl-delete ((t (:foreground "#ab4642" :background "#ab4642"))))
15
- '(diff-hl-insert ((t (:foreground "#a1b56c" :background "#a1b56c")))))
1
+ ;;; init.el --- Emacs Init: Initial file that emacs loads at startup.
16
2
 
17
- ;; Add melpa to package-archives list.
18
- (require 'package)
19
- (add-to-list 'package-archives
20
- '("melpa" . "http://melpa.org/packages/") t)
3
+ ;;; Commentary:
4
+ ;; This file includes the basic setup necessary to get started with Emacs.
21
5
 
22
- ;; use-package
23
- ;; Ensure use-package is installed.
24
- (unless (package-installed-p 'use-package)
25
- (package-refresh-contents)
26
- (package-install 'use-package))
27
- ;; Configure and load use-package.
28
- (setq use-package-always-ensure t)
29
- (eval-when-compile
30
- (defvar use-package-verbose t)
31
- (require 'use-package))
6
+ ;;; Code:
32
7
 
33
- ;; Disable menu bar in emacs.
8
+ ;; Disable menu bar in Emacs.
34
9
  (menu-bar-mode -1)
35
10
 
36
- ;; change backup file directory for emacs
11
+ ;; Change backup file directory for emacs.
37
12
  (setq backup-directory-alist `(("." . ,(concat user-emacs-directory "backups"))))
38
13
 
39
- ;; Use gls instead of the default ls on darwain systems like Apple.
40
- ;; coreutils is needed to be installed for gls. You can get it with brew install coreutils.
41
- ;; This solves the --dired problem on macOS and lists the directories first in dired.
42
- (when (string= system-type "darwin")
43
- (setq dired-use-ls-dired t
44
- insert-directory-program "/usr/local/bin/gls"
45
- dired-listing-switches "-aBhl --ignore=.DS_Store --ignore=.git --ignore=.bundle --ignore=.byebug_history --group-directories-first"))
14
+ ;; This lists the directories first and ignores some files and directories in dired.
15
+ (setq dired-use-ls-dired t)
16
+ (setq dired-listing-switches "-aBhl --ignore=.git --ignore=.bundle --ignore=.byebug_history --group-directories-first")
46
17
 
47
- ;; Hide dired details on startup
18
+ ;; Hide dired details on startup.
48
19
  (add-hook 'dired-mode-hook
49
20
  (lambda ()
50
21
  (dired-hide-details-mode)))
51
22
 
52
- ;; Setup initial screen
23
+ ;; Setup initial screen.
53
24
  (setq initial-buffer-choice (expand-file-name "."))
54
25
 
55
- ;; Org mode key bindings
26
+ ;; Org mode key bindings.
56
27
  (global-set-key (kbd "C-c l") 'org-store-link)
57
28
  (global-set-key (kbd "C-c a") 'org-agenda)
58
29
  (global-set-key (kbd "C-c c") 'org-capture)
@@ -64,7 +35,7 @@
64
35
  ;; Highlight current line.
65
36
  (global-hl-line-mode +1)
66
37
 
67
- ;; Revert buffers if they've changed on disk
38
+ ;; Revert buffers if they've changed on disk.
68
39
  (global-auto-revert-mode 1)
69
40
  (setq auto-revert-verbose nil)
70
41
 
@@ -80,31 +51,31 @@
80
51
  (add-to-list 'grep-find-ignored-directories "auto")
81
52
  (add-to-list 'grep-find-ignored-directories "elpa")))
82
53
 
83
- (use-package zenburn-theme
84
- :ensure t
85
- :config
86
- (load-theme 'zenburn t)
87
- (zenburn-with-color-variables
88
- (custom-theme-set-faces
89
- 'zenburn
90
- `(hl-line-face ((t (:background ,zenburn-bg+05 ))))
91
- `(hl-line ((t (:background ,zenburn-bg+05 ))))
92
- `(region ((nil (:background ,zenburn-bg+2))))
93
- )))
54
+ ;; Add melpa to package-archives list.
55
+ (require 'package)
56
+ (add-to-list 'package-archives
57
+ '("melpa" . "http://melpa.org/packages/") t)
94
58
 
95
- (use-package logview
96
- :ensure t)
59
+ ;; use-package
60
+ ;; Ensure use-package is installed.
61
+ (unless (package-installed-p 'use-package)
62
+ (package-refresh-contents)
63
+ (package-install 'use-package))
64
+ ;; Configure and load use-package.
65
+ (setq use-package-always-ensure t)
66
+ (eval-when-compile
67
+ (defvar use-package-verbose t)
68
+ (require 'use-package))
69
+
70
+ (use-package logview)
97
71
 
98
- (use-package dired-hacks-utils
99
- :ensure t)
72
+ (use-package dired-hacks-utils)
100
73
 
101
74
  (use-package dired-narrow
102
- :ensure t
103
75
  :bind (:map dired-mode-map
104
76
  ("/" . dired-narrow)))
105
77
 
106
78
  (use-package dired-subtree
107
- :ensure t
108
79
  :after dired
109
80
  :bind (:map dired-mode-map
110
81
  ("TAB" . dired-subtree-toggle)
@@ -113,33 +84,21 @@
113
84
  (setq dired-subtree-use-backgrounds nil))
114
85
 
115
86
  (use-package dired-git-info
116
- :ensure t
117
87
  :bind (:map dired-mode-map
118
88
  (")" . dired-git-info-mode)))
119
89
 
120
- (use-package dired-sidebar
121
- :ensure t
122
- :commands (dired-sidebar-toggle-sidebar)
123
- :bind (("C-x C-n" . dired-sidebar-toggle-sidebar))
124
- :init
125
- (setq dired-sidebar-use-term-integration t)
126
- (setq dired-sidebar-use-custom-font t))
127
-
128
- (use-package typescript-mode
129
- :ensure t)
90
+ ;; Extra font lock rules for a more colourful dired.
91
+ (use-package diredfl
92
+ :config
93
+ (diredfl-global-mode))
130
94
 
131
95
  (use-package clipetty
132
- :ensure t
133
96
  :bind ("M-w" . clipetty-kill-ring-save))
134
97
 
135
- (use-package osx-trash
136
- :config
137
- (when (eq system-type 'darwin)
138
- (osx-trash-setup))
139
- (setq delete-by-moving-to-trash t))
140
-
141
98
  (use-package undo-tree
142
99
  :config
100
+ ;; Prevent undo tree files from polluting your git repo
101
+ (setq undo-tree-history-directory-alist `(("." . ,(concat user-emacs-directory "backups/undotree"))))
143
102
  (global-undo-tree-mode))
144
103
 
145
104
  (use-package indent-guide
@@ -156,17 +115,6 @@
156
115
  (require 'smartparens-config))
157
116
  (add-hook 'prog-mode-hook #'smartparens-mode)
158
117
 
159
- (use-package ruby-mode
160
- :config
161
- (add-to-list 'auto-mode-alist
162
- '("\\.\\(?:cap\\|gemspec\\|irbrc\\|gemrc\\|rake\\|rb\\|ru\\|thor\\)\\'" . ruby-mode))
163
- (add-to-list 'auto-mode-alist
164
- '("\\(?:Brewfile\\|Capfile\\|Gemfile\\(?:\\.[a-zA-Z0-9._-]+\\)?\\|[rR]akefile\\)\\'" . ruby-mode)))
165
-
166
- (use-package ruby-electric
167
- :config
168
- (add-hook 'ruby-mode-hook 'ruby-electric-mode))
169
-
170
118
  (use-package robe
171
119
  :config
172
120
  (eval-after-load 'company '(push 'company-robe company-backends))
@@ -176,33 +124,6 @@
176
124
  :config
177
125
  (add-hook 'after-init-hook 'global-company-mode))
178
126
 
179
- (use-package bundler)
180
-
181
- (use-package rbenv
182
- :config
183
- (global-rbenv-mode))
184
-
185
- (use-package yaml-mode
186
- :config
187
- (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
188
- (add-hook 'yaml-mode-hook '(lambda () (define-key yaml-mode-map "\C-m" 'newline-and-indent))))
189
-
190
- (use-package web-mode
191
- :config
192
- (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode))
193
- (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode))
194
- (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode))
195
- (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode))
196
- (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode))
197
- (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode))
198
- (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode))
199
- (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
200
- (add-to-list 'auto-mode-alist '("\\.js?\\'" . web-mode))
201
- (add-to-list 'auto-mode-alist '("\\.jsx?\\'" . web-mode))
202
- (add-to-list 'auto-mode-alist '("\\.css?\\'" . web-mode))
203
- (add-to-list 'auto-mode-alist '("\\.scss?\\'" . web-mode))
204
- (add-to-list 'auto-mode-alist '("\\.xml?\\'" . web-mode)))
205
-
206
127
  (use-package projectile
207
128
  :config
208
129
  (projectile-mode +1)
@@ -214,12 +135,6 @@
214
135
  (projectile-rails-global-mode)
215
136
  (define-key projectile-rails-mode-map (kbd "C-c r") 'projectile-rails-command-map))
216
137
 
217
- ;; Extra font lock rules for a more colourful dired.
218
- (use-package diredfl
219
- :ensure t
220
- :config
221
- (diredfl-global-mode))
222
-
223
138
  (use-package diff-hl
224
139
  :custom-face
225
140
  ;; Change colors for insert, delete and change indicators in diff-hl
@@ -244,8 +159,6 @@
244
159
 
245
160
  ;; A Git porcelain inside Emacs.
246
161
  (use-package magit
247
- :ensure t
248
-
249
162
  :commands (magit-add-section-hook magit-section-initial-visibility-alist)
250
163
 
251
164
  :init
@@ -261,36 +174,53 @@
261
174
  (magit-add-section-hook 'magit-status-sections-hook 'magit-insert-tags nil t)
262
175
  (add-to-list 'magit-section-initial-visibility-alist '(tags . hide)))
263
176
 
264
- ;; Emacs-libvterm (vterm) is fully-fledged terminal emulator inside GNU Emacs based on libvterm, a C library.
265
- (use-package vterm
266
- :ensure t
267
- :config
268
- (define-key vterm-mode-map (kbd "C-q") #'vterm-send-next-key)
269
- :custom
270
- (vterm-always-compile-module t))
271
- ;; Managing multiple vterm buffers in Emacs.
272
- (use-package multi-vterm
273
- :ensure t)
274
-
275
177
  ;; Flycheck is a modern on-the-fly syntax checking extension for GNU Emacs.
276
178
  (use-package flycheck
277
- :ensure t
278
179
  :init
279
180
  (global-flycheck-mode))
280
181
 
281
182
  ;; Expand region increases the selected region by semantic units. Just keep pressing the key until it selects what you want.
282
183
  (use-package expand-region
283
- :ensure t
284
184
  :bind
285
185
  ("C-=" . er/expand-region))
286
186
 
287
- (use-package dockerfile-mode
288
- :ensure t)
187
+ ;; ruby-mode - comes included in latest emacs.
188
+ (add-to-list 'auto-mode-alist
189
+ '("\\.\\(?:cap\\|gemspec\\|irbrc\\|gemrc\\|rake\\|rb\\|ru\\|thor\\|god\\)\\'" . ruby-mode))
190
+ (add-to-list 'auto-mode-alist
191
+ '("\\(?:Brewfile\\|Capfile\\|Gemfile\\(?:\\.[a-zA-Z0-9._-]+\\)?\\|[rR]akefile\\)\\'" . ruby-mode))
192
+ (use-package ruby-electric
193
+ :config
194
+ (eval-after-load "ruby-mode"
195
+ '(add-hook 'ruby-mode-hook 'ruby-electric-mode)))
196
+
197
+ (use-package yaml-mode
198
+ :config
199
+ (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode))
200
+ (add-hook 'yaml-mode-hook '(lambda () (define-key yaml-mode-map "\C-m" 'newline-and-indent))))
201
+
202
+ (use-package typescript-mode)
203
+
204
+ (use-package web-mode
205
+ :config
206
+ (add-to-list 'auto-mode-alist '("\\.phtml\\'" . web-mode))
207
+ (add-to-list 'auto-mode-alist '("\\.tpl\\.php\\'" . web-mode))
208
+ (add-to-list 'auto-mode-alist '("\\.[agj]sp\\'" . web-mode))
209
+ (add-to-list 'auto-mode-alist '("\\.as[cp]x\\'" . web-mode))
210
+ (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode))
211
+ (add-to-list 'auto-mode-alist '("\\.mustache\\'" . web-mode))
212
+ (add-to-list 'auto-mode-alist '("\\.djhtml\\'" . web-mode))
213
+ (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
214
+ (add-to-list 'auto-mode-alist '("\\.js?\\'" . web-mode))
215
+ (add-to-list 'auto-mode-alist '("\\.jsx?\\'" . web-mode))
216
+ (add-to-list 'auto-mode-alist '("\\.css?\\'" . web-mode))
217
+ (add-to-list 'auto-mode-alist '("\\.scss?\\'" . web-mode))
218
+ (add-to-list 'auto-mode-alist '("\\.xml?\\'" . web-mode)))
219
+
220
+ (use-package dockerfile-mode)
289
221
 
290
222
  ;; Polymode is a framework for multiple major modes (MMM) inside a single Emacs buffer.
291
223
  (use-package polymode
292
- :ensure t
293
-
294
224
  :config
295
225
  (with-eval-after-load "polymode"
296
226
  (eieio-oset-default pm-inner-chunkmode :adjust-face -2))
@@ -74,7 +74,8 @@ module SmartMachine
74
74
  "--env PASSWORD=#{@password}",
75
75
  "--publish='2223:2223'", # TODO: Remove this published port and move it behind the reverse proxy when ready.
76
76
  "--volume='#{@name}-home:/home'",
77
- "--volume='#{@home_dir}/smartmachine/grids/terminal/#{@name}/backups:/root/backups'",
77
+ "--volume='#{@home_dir}/smartmachine/grids/terminal/#{@name}/backups:/root/backups'", # TODO: Do not volumize backups folder by default. Give option in the config file to decide what volume should be exposed from host to terminal.
78
+ "--volume='#{@home_dir}/smartmachine/apps/containers:/mnt/smartmachine/apps/containers'", # TODO: Do not volumize containers folder by default. Give option in the config file to decide what volume should be exposed from host to terminal.
78
79
  "--init",
79
80
  "--restart='always'",
80
81
  "--network='nginx-network'",
@@ -0,0 +1,37 @@
1
+ module SmartMachine
2
+ class Machines
3
+ class Network < SmartMachine::Base
4
+ def initialize(name:)
5
+ config = SmartMachine.config.network.dig(name.to_sym)
6
+ raise "network config for #{name} not found." unless config
7
+
8
+ @driver = config.dig(:driver)
9
+
10
+ @name = name.to_s
11
+ @home_dir = File.expand_path('~')
12
+ end
13
+
14
+ def uper
15
+ raise "Error: Could not create network: #{@name}" unless system(command.compact.join(' '), out: File::NULL)
16
+
17
+ puts "Created network: #{@name}"
18
+ end
19
+
20
+ def downer
21
+ raise "Error: Could not remove network: #{@name}" unless system("docker network rm '#{@name}'", out: File::NULL)
22
+
23
+ puts "Removed network: #{@name}"
24
+ end
25
+
26
+ private
27
+
28
+ def command
29
+ [
30
+ 'docker network create',
31
+ "--driver=#{@driver}",
32
+ @name
33
+ ]
34
+ end
35
+ end
36
+ end
37
+ end
@@ -103,12 +103,16 @@ module SmartMachine
103
103
  'config',
104
104
  'config/mysql',
105
105
  'config/mysql/schedule.rb',
106
+ 'config/phpmyadmin',
107
+ 'config/phpmyadmin/***',
106
108
  'config/credentials.yml.enc',
107
109
  'config/environment.rb',
108
110
  'config/elasticsearch.yml',
109
111
  'config/minio.yml',
110
112
  'config/mysql.yml',
113
+ 'config/network.yml',
111
114
  'config/nextcloud.yml',
115
+ 'config/phpmyadmin.yml',
112
116
  'config/prereceiver.yml',
113
117
  'config/redis.yml',
114
118
  'config/terminal.yml',
@@ -1,5 +1,6 @@
1
1
  mysqlone:
2
2
  port: 3306
3
+ networks: networkone
3
4
  root_password: <%= SmartMachine.credentials.dig(:mysqlone, :root_password) %>
4
5
  username: <%= SmartMachine.credentials.dig(:mysqlone, :username) %>
5
6
  password: <%= SmartMachine.credentials.dig(:mysqlone, :password) %>
@@ -7,6 +8,7 @@ mysqlone:
7
8
 
8
9
  # mysqltwo:
9
10
  # port: 3307
11
+ # networks: networkone
10
12
  # root_password: <%= SmartMachine.credentials.dig(:mysqltwo, :root_password) %>
11
13
  # username: <%= SmartMachine.credentials.dig(:mysqltwo, :username) %>
12
14
  # password: <%= SmartMachine.credentials.dig(:mysqltwo, :password) %>
@@ -0,0 +1,8 @@
1
+ networkone:
2
+ driver: bridge
3
+
4
+ networktwo:
5
+ driver: bridge
6
+
7
+ # networkthree:
8
+ # driver: bridge
@@ -0,0 +1,7 @@
1
+ <?php
2
+ /**
3
+ * phpMyAdmin configuration
4
+ *
5
+ * All directives are explained in documentation in the doc/ folder
6
+ * or at <https://docs.phpmyadmin.net/>.
7
+ */
@@ -0,0 +1,11 @@
1
+ phpmyadminone:
2
+ image: "phpmyadmin:5.2.1"
3
+ host: "yourphpmyadminone.yourdomain.com"
4
+ networks: ["networkone", "nginx-network"]
5
+ pma_controlhost: mysqlone
6
+
7
+ # phpmyadmintwo:
8
+ # image: "phpmyadmin:5.2.1"
9
+ # host: "yourphpmyadmintwo.yourdomain.com"
10
+ # networks: ["networkone", "nginx-network"]
11
+ # pma_controlhost: mysqlone
@@ -16,8 +16,8 @@ module SmartMachine
16
16
 
17
17
  module VERSION
18
18
  MAJOR = 1
19
- MINOR = 1
20
- TINY = 1
19
+ MINOR = 2
20
+ TINY = 0
21
21
  PRE = nil
22
22
 
23
23
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
data/lib/smart_machine.rb CHANGED
@@ -27,12 +27,15 @@ require 'smart_machine/grids/minio'
27
27
  require 'smart_machine/grids/mysql'
28
28
  require 'smart_machine/grids/nextcloud'
29
29
  require 'smart_machine/grids/nginx'
30
+ require 'smart_machine/grids/phpmyadmin'
30
31
  require 'smart_machine/grids/prereceiver'
31
32
  require 'smart_machine/grids/redis'
32
33
  # require 'smart_machine/grids/solr'
33
34
  require 'smart_machine/grids/terminal/wetty'
34
35
  require 'smart_machine/grids/terminal'
35
36
 
37
+ require 'smart_machine/machines/network'
38
+
36
39
  module SmartMachine
37
40
  class Error < StandardError; end
38
41
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartmachine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - plainsource
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-19 00:00:00.000000000 Z
11
+ date: 2024-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: net-ssh
@@ -185,11 +185,14 @@ files:
185
185
  - lib/smart_machine/commands/grid_commands/mysql.rb
186
186
  - lib/smart_machine/commands/grid_commands/nextcloud.rb
187
187
  - lib/smart_machine/commands/grid_commands/nginx.rb
188
+ - lib/smart_machine/commands/grid_commands/phpmyadmin.rb
188
189
  - lib/smart_machine/commands/grid_commands/prereceiver.rb
189
190
  - lib/smart_machine/commands/grid_commands/redis.rb
190
191
  - lib/smart_machine/commands/grid_commands/sub_thor.rb
191
192
  - lib/smart_machine/commands/grid_commands/terminal.rb
192
193
  - lib/smart_machine/commands/machine.rb
194
+ - lib/smart_machine/commands/machine_commands/network.rb
195
+ - lib/smart_machine/commands/machine_commands/sub_thor.rb
193
196
  - lib/smart_machine/commands/syncer.rb
194
197
  - lib/smart_machine/commands/utilities.rb
195
198
  - lib/smart_machine/configuration.rb
@@ -202,6 +205,7 @@ files:
202
205
  - lib/smart_machine/grids/mysql/docker-entrypoint-initdb.d/.keep
203
206
  - lib/smart_machine/grids/nextcloud.rb
204
207
  - lib/smart_machine/grids/nginx.rb
208
+ - lib/smart_machine/grids/phpmyadmin.rb
205
209
  - lib/smart_machine/grids/prereceiver.rb
206
210
  - lib/smart_machine/grids/prereceiver/Dockerfile
207
211
  - lib/smart_machine/grids/prereceiver/pre-receive
@@ -378,6 +382,7 @@ files:
378
382
  - lib/smart_machine/grids/terminal/wetty.rb
379
383
  - lib/smart_machine/logger.rb
380
384
  - lib/smart_machine/machine.rb
385
+ - lib/smart_machine/machines/network.rb
381
386
  - lib/smart_machine/scp.rb
382
387
  - lib/smart_machine/ssh.rb
383
388
  - lib/smart_machine/syncer.rb
@@ -389,7 +394,10 @@ files:
389
394
  - lib/smart_machine/templates/dotsmartmachine/config/minio.yml
390
395
  - lib/smart_machine/templates/dotsmartmachine/config/mysql.yml
391
396
  - lib/smart_machine/templates/dotsmartmachine/config/mysql/schedule.rb
397
+ - lib/smart_machine/templates/dotsmartmachine/config/network.yml
392
398
  - lib/smart_machine/templates/dotsmartmachine/config/nextcloud.yml
399
+ - lib/smart_machine/templates/dotsmartmachine/config/phpmyadmin.yml
400
+ - lib/smart_machine/templates/dotsmartmachine/config/phpmyadmin/phpmyadminone/config.user.inc.php
393
401
  - lib/smart_machine/templates/dotsmartmachine/config/prereceiver.yml
394
402
  - lib/smart_machine/templates/dotsmartmachine/config/redis.yml
395
403
  - lib/smart_machine/templates/dotsmartmachine/config/terminal.yml
@@ -409,8 +417,8 @@ licenses:
409
417
  metadata:
410
418
  homepage_uri: https://github.com/plainsource/smartmachine
411
419
  bug_tracker_uri: https://github.com/plainsource/smartmachine/issues
412
- changelog_uri: https://github.com/plainsource/smartmachine/releases/tag/v1.1.1
413
- source_code_uri: https://github.com/plainsource/smartmachine/tree/v1.1.1
420
+ changelog_uri: https://github.com/plainsource/smartmachine/releases/tag/v1.2.0
421
+ source_code_uri: https://github.com/plainsource/smartmachine/tree/v1.2.0
414
422
  post_install_message:
415
423
  rdoc_options: []
416
424
  require_paths: