smartmachine 1.1.1 → 1.2.0.dev

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7216722bfdaa3eefae5c9de4eaa5b21c684b281226a917923ba3d09801471bc8
4
- data.tar.gz: 1b9e007c73ec297eb4c27d61de76e21ea612f81e4252a65f18a835f8ed1c2326
3
+ metadata.gz: 3d02cc8e054d7716fda6e487f5964c2c0e47a604e664be9cbcc77436ac1b8cc3
4
+ data.tar.gz: e476480bd9b755c84f4996e86dbc99e1d24d96b1139a9fd7bb14c4ab7b24cc29
5
5
  SHA512:
6
- metadata.gz: 1e5ebde0903f967e19f36d238e767ae189de377ff3c404adc721b2f28c588a51a9165b38938098bb2c533c9320e7dc0188d91f2cb0a01848b3f789e52adc8866
7
- data.tar.gz: 9b70003e202c55ae5f85ef1866b43804bfd226ed853ad01d99fdf2b9df66d457912f17959f6ed32df3998ddb2159b5720049cf0ea10668955fba7189c3ce7397
6
+ metadata.gz: 06ad0c9df3fde28ce64a629d2caa597cd84838eed893a3ce7b835bc29715f8b4f2d0764b8e32bb6593f255010519d342f60593ae5caf4417802953ea4e47d287
7
+ data.tar.gz: 6eadb0a1ba55a868f738dd7cb5ccfedda02247406d9d0fadc8f8b18918a43a9859164fd9844921bd377f0e4a4e4b4ba6c9890ca68bbbd494c25459b93c53c063
@@ -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))
@@ -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,9 +16,9 @@ module SmartMachine
16
16
 
17
17
  module VERSION
18
18
  MAJOR = 1
19
- MINOR = 1
20
- TINY = 1
21
- PRE = nil
19
+ MINOR = 2
20
+ TINY = 0
21
+ PRE = "dev"
22
22
 
23
23
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
24
24
  end
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.dev
5
5
  platform: ruby
6
6
  authors:
7
7
  - plainsource
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-19 00:00:00.000000000 Z
11
+ date: 2023-10-23 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,9 +417,9 @@ 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
414
- post_install_message:
420
+ changelog_uri: https://github.com/plainsource/smartmachine/releases/tag/v1.2.0.dev
421
+ source_code_uri: https://github.com/plainsource/smartmachine/tree/v1.2.0.dev
422
+ post_install_message:
415
423
  rdoc_options: []
416
424
  require_paths:
417
425
  - lib
@@ -427,7 +435,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
427
435
  version: 1.8.11
428
436
  requirements: []
429
437
  rubygems_version: 3.1.6
430
- signing_key:
438
+ signing_key:
431
439
  specification_version: 4
432
440
  summary: Full-stack deployment framework for Rails.
433
441
  test_files: []