ConfigLMM 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/CNAME +1 -0
  4. data/Examples/.lmm.state.yaml +159 -0
  5. data/Examples/ConfigLMM.mm.yaml +32 -0
  6. data/Examples/Implemented.mm.yaml +252 -4
  7. data/Examples/SmallBusiness.mm.yaml +492 -0
  8. data/Plugins/Apps/Answer/answer.lmm.rb +165 -0
  9. data/Plugins/Apps/Answer/answer@.service +40 -0
  10. data/Plugins/Apps/ArchiSteamFarm/ArchiSteamFarm.conf.erb +0 -3
  11. data/Plugins/Apps/ArchiSteamFarm/ArchiSteamFarm.lmm.rb +0 -1
  12. data/Plugins/Apps/Authentik/Authentik-ProxyOutpost.container +7 -1
  13. data/Plugins/Apps/Authentik/Authentik-Server.container +6 -1
  14. data/Plugins/Apps/Authentik/Authentik-Worker.container +6 -1
  15. data/Plugins/Apps/Authentik/Authentik.conf.erb +12 -7
  16. data/Plugins/Apps/Authentik/Authentik.lmm.rb +226 -61
  17. data/Plugins/Apps/BookStack/BookStack.conf.erb +0 -3
  18. data/Plugins/Apps/BookStack/BookStack.container +5 -0
  19. data/Plugins/Apps/BookStack/BookStack.lmm.rb +14 -3
  20. data/Plugins/Apps/Cassandra/Cassandra.lmm.rb +9 -19
  21. data/Plugins/Apps/ClickHouse/ClickHouse.container +28 -0
  22. data/Plugins/Apps/ClickHouse/ClickHouse.lmm.rb +113 -0
  23. data/Plugins/Apps/ClickHouse/Config/listen.yaml +2 -0
  24. data/Plugins/Apps/ClickHouse/Config/logger.yaml +8 -0
  25. data/Plugins/Apps/ClickHouse/Config/zookeepers.yaml +5 -0
  26. data/Plugins/Apps/ClickHouse/Connection.rb +96 -0
  27. data/Plugins/Apps/Discourse/Discourse-Sidekiq.container +5 -0
  28. data/Plugins/Apps/Discourse/Discourse.conf.erb +1 -4
  29. data/Plugins/Apps/Discourse/Discourse.container +4 -0
  30. data/Plugins/Apps/Discourse/Discourse.lmm.rb +116 -55
  31. data/Plugins/Apps/Dovecot/Dovecot.lmm.rb +74 -62
  32. data/Plugins/Apps/ERPNext/ERPNext-Frontend.container +6 -1
  33. data/Plugins/Apps/ERPNext/ERPNext-Queue.container +5 -0
  34. data/Plugins/Apps/ERPNext/ERPNext-Scheduler.container +5 -0
  35. data/Plugins/Apps/ERPNext/ERPNext-Websocket.container +6 -1
  36. data/Plugins/Apps/ERPNext/ERPNext.container +6 -1
  37. data/Plugins/Apps/ERPNext/ERPNext.lmm.rb +138 -127
  38. data/Plugins/Apps/GitLab/GitLab.container +6 -0
  39. data/Plugins/Apps/GitLab/GitLab.lmm.rb +43 -49
  40. data/Plugins/Apps/Homepage/Homepage.conf.erb +86 -0
  41. data/Plugins/Apps/Homepage/Homepage.container +19 -0
  42. data/Plugins/Apps/Homepage/Homepage.lmm.rb +54 -0
  43. data/Plugins/Apps/IPFS/IPFS.conf.erb +0 -3
  44. data/Plugins/Apps/IPFS/IPFS.lmm.rb +0 -1
  45. data/Plugins/Apps/InfluxDB/InfluxDB.conf.erb +0 -3
  46. data/Plugins/Apps/InfluxDB/InfluxDB.lmm.rb +0 -1
  47. data/Plugins/Apps/Jackett/Jackett.conf.erb +0 -3
  48. data/Plugins/Apps/Jackett/Jackett.lmm.rb +0 -1
  49. data/Plugins/Apps/Jellyfin/Jellyfin.conf.erb +0 -3
  50. data/Plugins/Apps/Jellyfin/Jellyfin.lmm.rb +0 -1
  51. data/Plugins/Apps/LetsEncrypt/LetsEncrypt.lmm.rb +49 -28
  52. data/Plugins/Apps/LibreTranslate/LibreTranslate.container +21 -0
  53. data/Plugins/Apps/LibreTranslate/LibreTranslate.lmm.rb +34 -0
  54. data/Plugins/Apps/Lobsters/Containerfile +81 -0
  55. data/Plugins/Apps/Lobsters/Lobsters-Tasks.container +26 -0
  56. data/Plugins/Apps/Lobsters/Lobsters.conf.erb +99 -0
  57. data/Plugins/Apps/Lobsters/Lobsters.container +27 -0
  58. data/Plugins/Apps/Lobsters/Lobsters.lmm.rb +196 -0
  59. data/Plugins/Apps/Lobsters/crontab +3 -0
  60. data/Plugins/Apps/Lobsters/database.yml +26 -0
  61. data/Plugins/Apps/Lobsters/entrypoint.sh +30 -0
  62. data/Plugins/Apps/Lobsters/generateCredentials.rb +19 -0
  63. data/Plugins/Apps/Lobsters/lobsters-cron.sh +25 -0
  64. data/Plugins/Apps/Lobsters/lobsters-daily.sh +23 -0
  65. data/Plugins/Apps/Lobsters/puma.rb +49 -0
  66. data/Plugins/Apps/MariaDB/Connection.rb +55 -0
  67. data/Plugins/Apps/MariaDB/MariaDB.lmm.rb +60 -53
  68. data/Plugins/Apps/Mastodon/Mastodon-Sidekiq.container +22 -0
  69. data/Plugins/Apps/Mastodon/Mastodon-Streaming.container +20 -0
  70. data/Plugins/Apps/Mastodon/Mastodon.conf.erb +34 -45
  71. data/Plugins/Apps/Mastodon/Mastodon.container +28 -0
  72. data/Plugins/Apps/Mastodon/Mastodon.lmm.rb +240 -5
  73. data/Plugins/Apps/Mastodon/configlmm.rake +30 -0
  74. data/Plugins/Apps/Mastodon/entrypoint.sh +16 -0
  75. data/Plugins/Apps/Matrix/Element.container +5 -0
  76. data/Plugins/Apps/Matrix/Matrix.conf.erb +2 -8
  77. data/Plugins/Apps/Matrix/Matrix.lmm.rb +100 -71
  78. data/Plugins/Apps/Matrix/Synapse.container +5 -0
  79. data/Plugins/Apps/Netdata/Netdata.conf.erb +0 -3
  80. data/Plugins/Apps/Netdata/Netdata.lmm.rb +0 -1
  81. data/Plugins/Apps/Nextcloud/Nextcloud.conf.erb +3 -4
  82. data/Plugins/Apps/Nextcloud/Nextcloud.lmm.rb +150 -68
  83. data/Plugins/Apps/Nextcloud/autoconfig.php +13 -0
  84. data/Plugins/Apps/Nextcloud/config.php +10 -1
  85. data/Plugins/Apps/Nextcloud/nextcloudcron.service +8 -0
  86. data/Plugins/Apps/Nextcloud/nextcloudcron.timer +10 -0
  87. data/Plugins/Apps/Nginx/Connection.rb +93 -0
  88. data/Plugins/Apps/Nginx/conf.d/configlmm.conf +50 -9
  89. data/Plugins/Apps/Nginx/conf.d/languages.conf +21 -0
  90. data/Plugins/Apps/Nginx/config-lmm/errors.conf +25 -20
  91. data/Plugins/Apps/Nginx/config-lmm/gateway-errors.conf +20 -0
  92. data/Plugins/Apps/Nginx/config-lmm/proxy.conf +1 -1
  93. data/Plugins/Apps/Nginx/main.conf.erb +7 -3
  94. data/Plugins/Apps/Nginx/nginx.conf +2 -2
  95. data/Plugins/Apps/Nginx/nginx.lmm.rb +99 -81
  96. data/Plugins/Apps/Nginx/proxy.conf.erb +11 -3
  97. data/Plugins/Apps/Odoo/Odoo.conf.erb +0 -3
  98. data/Plugins/Apps/Odoo/Odoo.container +5 -0
  99. data/Plugins/Apps/Odoo/Odoo.lmm.rb +4 -5
  100. data/Plugins/Apps/Ollama/Ollama.container +26 -0
  101. data/Plugins/Apps/Ollama/Ollama.lmm.rb +73 -0
  102. data/Plugins/Apps/OpenTelemetry/Config/config.yaml +704 -0
  103. data/Plugins/Apps/OpenTelemetry/OpenTelemetry.lmm.rb +154 -0
  104. data/Plugins/Apps/OpenVidu/Ingress.container +5 -0
  105. data/Plugins/Apps/OpenVidu/OpenVidu.conf.erb +0 -3
  106. data/Plugins/Apps/OpenVidu/OpenVidu.container +5 -0
  107. data/Plugins/Apps/OpenVidu/OpenVidu.lmm.rb +7 -3
  108. data/Plugins/Apps/OpenVidu/OpenViduCall.conf.erb +0 -3
  109. data/Plugins/Apps/OpenVidu/OpenViduCall.container +5 -0
  110. data/Plugins/Apps/PHP-FPM/Connection.rb +91 -0
  111. data/Plugins/Apps/PHP-FPM/PHP-FPM.lmm.rb +31 -4
  112. data/Plugins/Apps/Peppermint/Peppermint.conf.erb +2 -5
  113. data/Plugins/Apps/Peppermint/Peppermint.container +5 -0
  114. data/Plugins/Apps/Peppermint/Peppermint.lmm.rb +29 -33
  115. data/Plugins/Apps/Perplexica/Perplexica.container +25 -0
  116. data/Plugins/Apps/Perplexica/Perplexica.lmm.rb +92 -0
  117. data/Plugins/Apps/Perplexica/config.toml +26 -0
  118. data/Plugins/Apps/Podman/Connection.rb +24 -0
  119. data/Plugins/Apps/Podman/Podman.lmm.rb +80 -0
  120. data/Plugins/Apps/Podman/storage.conf +6 -0
  121. data/Plugins/Apps/Postfix/Postfix.lmm.rb +242 -164
  122. data/Plugins/Apps/PostgreSQL/Connection.rb +97 -0
  123. data/Plugins/Apps/PostgreSQL/PostgreSQL.lmm.rb +184 -148
  124. data/Plugins/Apps/Pterodactyl/Pterodactyl.conf.erb +0 -3
  125. data/Plugins/Apps/Pterodactyl/Pterodactyl.lmm.rb +0 -2
  126. data/Plugins/Apps/Pterodactyl/Wings.conf.erb +0 -3
  127. data/Plugins/Apps/RVM/RVM.lmm.rb +57 -0
  128. data/Plugins/Apps/Roundcube/Roundcube.conf.erb +0 -3
  129. data/Plugins/Apps/Roundcube/Roundcube.lmm.rb +15 -19
  130. data/Plugins/Apps/SSH/SSH.lmm.rb +9 -15
  131. data/Plugins/Apps/SearXNG/SearXNG.container +22 -0
  132. data/Plugins/Apps/SearXNG/SearXNG.lmm.rb +79 -0
  133. data/Plugins/Apps/SearXNG/limiter.toml +40 -0
  134. data/Plugins/Apps/SearXNG/settings.yml +2 -0
  135. data/Plugins/Apps/SigNoz/Config/alerts.yml +11 -0
  136. data/Plugins/Apps/SigNoz/Config/otel-collector-config.yaml +110 -0
  137. data/Plugins/Apps/SigNoz/Config/otel-collector-opamp-config.yaml +1 -0
  138. data/Plugins/Apps/SigNoz/Config/prometheus.yml +18 -0
  139. data/Plugins/Apps/SigNoz/SigNoz-Collector.container +23 -0
  140. data/Plugins/Apps/SigNoz/SigNoz-Migrator.container +17 -0
  141. data/Plugins/Apps/SigNoz/SigNoz.conf.erb +61 -0
  142. data/Plugins/Apps/SigNoz/SigNoz.container +26 -0
  143. data/Plugins/Apps/SigNoz/SigNoz.lmm.rb +319 -0
  144. data/Plugins/Apps/Solr/log4j2.xml +89 -0
  145. data/Plugins/Apps/Solr/solr.lmm.rb +82 -0
  146. data/Plugins/Apps/Sunshine/Sunshine.conf.erb +0 -3
  147. data/Plugins/Apps/Sunshine/Sunshine.lmm.rb +0 -1
  148. data/Plugins/Apps/Tunnel/tunnel.lmm.rb +33 -37
  149. data/Plugins/Apps/UVdesk/UVdesk.conf.erb +0 -3
  150. data/Plugins/Apps/Umami/Umami.container +19 -0
  151. data/Plugins/Apps/Umami/Umami.lmm.rb +108 -0
  152. data/Plugins/Apps/Valkey/Valkey.lmm.rb +54 -42
  153. data/Plugins/Apps/Vaultwarden/Vaultwarden.conf.erb +9 -6
  154. data/Plugins/Apps/Vaultwarden/Vaultwarden.container +7 -1
  155. data/Plugins/Apps/Vaultwarden/Vaultwarden.lmm.rb +64 -29
  156. data/Plugins/Apps/Wiki.js/Wiki.js.conf.erb +1 -4
  157. data/Plugins/Apps/Wiki.js/Wiki.js.container +5 -0
  158. data/Plugins/Apps/Wiki.js/Wiki.js.lmm.rb +31 -37
  159. data/Plugins/Apps/YaCy/YaCy.conf.erb +93 -0
  160. data/Plugins/Apps/YaCy/YaCy.container +21 -0
  161. data/Plugins/Apps/YaCy/YaCy.lmm.rb +160 -0
  162. data/Plugins/Apps/ZooKeeper/ZooKeeper.container +24 -0
  163. data/Plugins/Apps/ZooKeeper/ZooKeeper.lmm.rb +68 -0
  164. data/Plugins/Apps/bitmagnet/bitmagnet.conf.erb +0 -3
  165. data/Plugins/Apps/bitmagnet/bitmagnet.lmm.rb +0 -1
  166. data/Plugins/Apps/gollum/gollum.conf.erb +2 -4
  167. data/Plugins/Apps/gollum/gollum.container +6 -0
  168. data/Plugins/Apps/gollum/gollum.lmm.rb +51 -50
  169. data/Plugins/Apps/llama.cpp/llama.cpp.container +28 -0
  170. data/Plugins/Apps/llama.cpp/llama.cpp.lmm.rb +90 -0
  171. data/Plugins/Apps/vLLM/vLLM.container +32 -0
  172. data/Plugins/Apps/vLLM/vLLM.lmm.rb +89 -0
  173. data/Plugins/OS/General/Utils.lmm.rb +26 -0
  174. data/Plugins/OS/Linux/Connection.rb +472 -0
  175. data/Plugins/OS/Linux/Debian/preseed.cfg.erb +25 -6
  176. data/Plugins/OS/Linux/Flavours.yaml +13 -0
  177. data/Plugins/OS/Linux/Grub/grub.cfg +10 -0
  178. data/Plugins/OS/Linux/HTTP.rb +32 -0
  179. data/Plugins/OS/Linux/Linux.lmm.rb +533 -187
  180. data/Plugins/OS/Linux/Packages.yaml +20 -1
  181. data/Plugins/OS/Linux/Services.yaml +8 -0
  182. data/Plugins/OS/Linux/Shell.rb +70 -0
  183. data/Plugins/OS/Linux/Syslinux/default +8 -0
  184. data/Plugins/OS/Linux/WireGuard/WireGuard.lmm.rb +83 -59
  185. data/Plugins/OS/Linux/WireGuard/wg0.conf.erb +3 -0
  186. data/Plugins/OS/Linux/openSUSE/autoinst.xml.erb +29 -3
  187. data/Plugins/OS/Linux/systemd/systemd.lmm.rb +13 -11
  188. data/Plugins/OS/Routers/Aruba/ArubaInstant.lmm.rb +6 -5
  189. data/Plugins/Platforms/GitHub.lmm.rb +73 -28
  190. data/Plugins/Platforms/GoDaddy/GoDaddy.lmm.rb +9 -6
  191. data/Plugins/Platforms/Proxmox/Proxmox.lmm.rb +402 -0
  192. data/Plugins/Platforms/Proxmox/XTerm.rb +321 -0
  193. data/Plugins/Platforms/libvirt/libvirt.lmm.rb +38 -13
  194. data/Plugins/Platforms/porkbun.lmm.rb +12 -2
  195. data/Plugins/Platforms/porkbun_spec.rb +2 -2
  196. data/Plugins/Services/DNS/AmberBit.lmm.rb +1 -1
  197. data/Plugins/Services/DNS/ArubaItDNS.lmm.rb +1 -1
  198. data/Plugins/Services/DNS/NICLV.lmm.rb +1 -1
  199. data/Plugins/Services/DNS/PowerDNS.lmm.rb +70 -68
  200. data/Plugins/Services/DNS/tonic.lmm.rb +22 -12
  201. data/lib/ConfigLMM/Framework/plugins/dns.rb +4 -3
  202. data/lib/ConfigLMM/Framework/plugins/linuxApp.rb +145 -184
  203. data/lib/ConfigLMM/Framework/plugins/nginxApp.rb +34 -17
  204. data/lib/ConfigLMM/Framework/plugins/plugin.rb +53 -181
  205. data/lib/ConfigLMM/Framework/plugins/store.rb +4 -4
  206. data/lib/ConfigLMM/Framework/variables.rb +75 -0
  207. data/lib/ConfigLMM/Framework.rb +1 -0
  208. data/lib/ConfigLMM/cli.rb +12 -6
  209. data/lib/ConfigLMM/commands/configsCommand.rb +37 -6
  210. data/lib/ConfigLMM/commands/diff.rb +33 -9
  211. data/lib/ConfigLMM/context.rb +22 -3
  212. data/lib/ConfigLMM/io/configList.rb +82 -6
  213. data/lib/ConfigLMM/io/connection.rb +143 -0
  214. data/lib/ConfigLMM/io/dhcp.rb +330 -0
  215. data/lib/ConfigLMM/io/http.rb +78 -0
  216. data/lib/ConfigLMM/io/local.rb +207 -0
  217. data/lib/ConfigLMM/io/pxe.rb +92 -0
  218. data/lib/ConfigLMM/io/ssh.rb +156 -0
  219. data/lib/ConfigLMM/io/tftp.rb +105 -0
  220. data/lib/ConfigLMM/io.rb +2 -0
  221. data/lib/ConfigLMM/secrets/envStore.rb +39 -0
  222. data/lib/ConfigLMM/secrets/fileStore.rb +43 -0
  223. data/lib/ConfigLMM/state.rb +2 -1
  224. data/lib/ConfigLMM/version.rb +2 -1
  225. data/lib/ConfigLMM.rb +1 -0
  226. data/{Examples → scripts}/configlmmAuth.sh +7 -5
  227. metadata +205 -8
@@ -8,230 +8,183 @@ module ConfigLMM
8
8
  class LinuxApp < Framework::Plugin
9
9
 
10
10
  LINUX_FOLDER = __dir__ + '/../../../../Plugins/OS/Linux/'
11
- SUSE_NAME = 'openSUSE Leap'
12
11
  SUSE_ID = 'opensuse-leap'
13
- DEBIAN_NAME = 'Debian'
14
- PROXMOXVE_NAME = 'Proxmox VE'
15
12
  PODMAN_PACKAGE = 'Podman'
16
13
  SYSTEMD_CONTAINERS_PATH = '~/.config/containers/systemd/'
17
14
 
15
+ # DEPRECATED
18
16
  def ensurePackage(name, location, binary = nil)
19
17
  self.class.ensurePackage(name, location, binary)
20
18
  end
21
19
 
20
+ # DEPRECATED
22
21
  def ensurePackages(names, location)
23
22
  self.class.ensurePackages(names, location)
24
23
  end
25
24
 
26
- def self.ensurePackage(name, location, binary = nil)
25
+ # DEPRECATED
26
+ def self.ensurePackage(name, locationOrConnection, binary = nil)
27
27
  if binary && TTY::Which.which(binary)
28
28
  return
29
29
  end
30
- self.ensurePackages([name], location)
30
+ self.ensurePackages([name], locationOrConnection)
31
31
  end
32
32
 
33
- def self.ensurePackages(names, locationOrSSH)
34
- self.doSSH(locationOrSSH) do |ssh|
35
- distroInfo = self.currentDistroInfo(ssh)
36
- reposPackages = self.mapPackages(names, distroInfo['Name'])
37
-
38
- repos = []
39
- pkgs = []
40
- reposPackages.each do |pkg|
41
- if pkg.include?('|')
42
- repoName, pkg = pkg.split('|')
43
- repos << repoName
44
- pkgs << pkg
45
- else
46
- pkgs << pkg
47
- end
48
- end
49
- repos.each do |repoName|
50
- self.addRepo(repoName, distroInfo, ssh)
51
- end
52
- command = distroInfo['InstallPackage'] + ' ' + pkgs.map { |pkg| pkg.shellescape }.join(' ')
53
- if ssh
54
- self.sshExec!(ssh, command)
55
- else
56
- if `echo $EUID`.strip == '0'
57
- `#{command} >/dev/null`
58
- else
59
- `sudo #{command} >/dev/null`
60
- end
61
- end
62
- distroInfo
33
+ # DEPRECATED
34
+ def self.ensurePackages(names, locationOrConnection)
35
+ self.doConnection(locationOrConnection) do |connection|
36
+ linuxConnection = LMM::LinuxConnection.new(connection)
37
+ linuxConnection.ensurePackages(names)
38
+ linuxConnection.distroInfo
63
39
  end
64
40
  end
65
41
 
66
- def self.removePackage(name, locationOrSSH, dry = false)
67
- self.doSSH(locationOrSSH) do |ssh|
68
- distroInfo = self.currentDistroInfo(ssh)
69
- reposPackages = self.mapPackages([name], distroInfo['Name'])
70
-
71
- pkgs = []
72
- reposPackages.each do |pkg|
73
- if pkg.include?('|')
74
- repoName, pkg = pkg.split('|')
75
- pkgs << pkg
76
- else
77
- pkgs << pkg
78
- end
79
- end
80
-
81
- command = distroInfo['RemovePackage'] + ' ' + pkgs.map { |pkg| pkg.shellescape }.join(' ')
82
- if ssh
83
- self.sshExec!(ssh, command, true, dry)
84
- else
85
- if `echo $EUID`.strip == '0'
86
- if dry
87
- puts "Would execute: #{command} >/dev/null"
88
- else
89
- `#{command} >/dev/null`
90
- end
91
- else
92
- if dry
93
- puts "Would execute: sudo #{command} >/dev/null"
94
- else
95
- `sudo #{command} >/dev/null`
96
- end
97
- end
98
- end
99
- distroInfo
42
+ # DEPRECATED
43
+ def self.removePackage(name, locationOrConnection, dry = false)
44
+ self.doConnection(locationOrConnection) do |connection|
45
+ linuxConnection = LMM::LinuxConnection.new(connection)
46
+ linuxConnection.removePackage(name)
47
+ linuxConnection.distroInfo
100
48
  end
101
49
  end
102
50
 
103
- def ensureServiceAutoStart(name, location)
104
- if location && location != '@me'
105
- uri = Addressable::URI.parse(location)
106
- raise Framework::PluginProcessError.new("#{id}: Unknown Protocol: #{uri.scheme}!") if uri.scheme != 'ssh'
107
- self.class.ensureServiceAutoStartOverSSH(name, uri)
108
- else
109
- # TODO
110
- end
51
+ # DEPRECATED
52
+ def ensureServiceAutoStart(name, locationOrConnection)
53
+ self.class.ensureServiceAutoStart(name, locationOrConnection)
111
54
  end
112
55
 
113
- def self.ensureServiceAutoStart(name, locationOrSSH)
114
- self.execDistroCommand(name, 'AutoStartService', locationOrSSH)
56
+ # DEPRECATED
57
+ def self.ensureServiceAutoStart(name, locationOrConnection)
58
+ name = self.convertServiceName(name, locationOrConnection)
59
+ self.execDistroCommand(name, 'AutoStartService', locationOrConnection)
115
60
  end
116
61
 
117
- # Deprecated
118
- def self.ensureServiceAutoStartOverSSH(name, locationOrSSH)
119
- self.ensureServiceAutoStart(name, locationOrSSH)
62
+ # DEPRECATED
63
+ def self.ensureServiceAutoStartOverSSH(name, locationOrConnection)
64
+ self.ensureServiceAutoStart(name, locationOrConnection)
120
65
  end
121
66
 
122
- def startService(name, location, dry = false)
123
- if location && location != '@me'
124
- uri = Addressable::URI.parse(location)
125
- raise Framework::PluginProcessError.new("#{id}: Unknown Protocol: #{uri.scheme}!") if uri.scheme != 'ssh'
126
- self.class.startService(name, location, dry = false)
127
- else
128
- # TODO
129
- end
67
+ # DEPRECATED
68
+ def startService(name, locationOrConnection, dry = false)
69
+ self.class.startService(name, locationOrConnection, dry = false)
130
70
  end
131
71
 
132
- def self.startService(name, locationOrSSH, dry = false)
133
- self.execDistroCommand(name, 'StartService', locationOrSSH, false, dry)
72
+ # DEPRECATED
73
+ def self.startService(name, locationOrConnection, dry = false)
74
+ name = self.convertServiceName(name, locationOrConnection)
75
+ self.execDistroCommand(name, 'StartService', locationOrConnection, false, dry)
134
76
  end
135
77
 
136
- # Deprecated
137
- def self.startServiceOverSSH(name, locationOrSSH, dry = false)
138
- self.startService(name, locationOrSSH, dry)
78
+ # DEPRECATED
79
+ def self.startServiceOverSSH(name, locationOrConnection, dry = false)
80
+ name = self.convertServiceName(name, locationOrConnection)
81
+ self.startService(name, locationOrConnection, dry)
139
82
  end
140
83
 
141
- def self.restartService(name, locationOrSSH, dry = false)
142
- self.execDistroCommand(name, 'RestartService', locationOrSSH, false, dry)
84
+ # DEPRECATED
85
+ def self.restartService(name, locationOrConnection, dry = false)
86
+ name = self.convertServiceName(name, locationOrConnection)
87
+ self.execDistroCommand(name, 'RestartService', locationOrConnection, false, dry)
143
88
  end
144
89
 
145
- def self.reloadService(name, locationOrSSH, dry = false)
146
- self.execDistroCommand(name, 'ReloadService', locationOrSSH, false, dry)
90
+ # DEPRECATED
91
+ def self.reloadService(name, locationOrConnection, dry = false)
92
+ name = self.convertServiceName(name, locationOrConnection)
93
+ self.execDistroCommand(name, 'ReloadService', locationOrConnection, false, dry)
147
94
  end
148
95
 
149
- def self.stopService(name, locationOrSSH, dry = false)
150
- self.execDistroCommand(name, 'StopService', locationOrSSH, true, dry)
96
+ # DEPRECATED
97
+ def self.stopService(name, locationOrConnection, dry = false)
98
+ name = self.convertServiceName(name, locationOrConnection)
99
+ self.execDistroCommand(name, 'StopService', locationOrConnection, true, dry)
151
100
  end
152
101
 
153
- def self.disableService(name, locationOrSSH, dry = false)
154
- self.execDistroCommand(name, 'DisableService', locationOrSSH, true, dry)
102
+ # DEPRECATED
103
+ def self.disableService(name, locationOrConnection, dry = false)
104
+ name = self.convertServiceName(name, locationOrConnection)
105
+ self.execDistroCommand(name, 'DisableService', locationOrConnection, true, dry)
155
106
  end
156
107
 
157
- def self.reloadServiceManager(locationOrSSH, dry = false)
158
- self.execDistroCommand(nil, 'ReloadServiceManager', locationOrSSH, false, dry)
108
+ # DEPRECATED
109
+ def self.reloadServiceManager(locationOrConnection, dry = false)
110
+ self.execDistroCommand(nil, 'ReloadServiceManager', locationOrConnection, false, dry)
159
111
  end
160
112
 
161
- def self.deleteUserAndGroup(name, locationOrSSH, dry = false)
162
- self.execDistroCommand(name, 'DeleteUser', locationOrSSH, true, dry)
163
- self.execDistroCommand(name, 'DeleteGroup', locationOrSSH, true, dry)
113
+ # DEPRECATED
114
+ def self.deleteUserAndGroup(name, locationOrConnection, dry = false)
115
+ self.execDistroCommand(name, 'DeleteUser', locationOrConnection, true, dry)
116
+ self.execDistroCommand(name, 'DeleteGroup', locationOrConnection, true, dry)
164
117
  end
165
118
 
166
- def self.execDistroCommand(param, commandName, locationOrSSH, allowFailure = false, dry = false)
167
- self.doSSH(locationOrSSH) do |ssh|
168
- distroInfo = self.currentDistroInfo(ssh)
119
+ # DEPRECATED
120
+ def self.execDistroCommand(param, commandName, locationOrConnection, allowFailure = false, dry = false)
121
+ self.doConnection(locationOrConnection) do |connection|
122
+ LMM::LinuxConnection.new(connection).execDistroCommand(param, commandName, allowFailure, { 'dry': dry })
123
+ end
124
+ end
169
125
 
170
- command = distroInfo[commandName]
171
- command += ' ' + param.shellescape unless param.nil?
172
- self.exec(command, ssh, allowFailure, dry)
126
+ # DEPRECATED
127
+ def self.convertServiceName(name, connection)
128
+ self.doConnection(connection) do |connection|
129
+ name = LMM::LinuxConnection.new(connection).convertServiceName(name)
173
130
  end
131
+ name
174
132
  end
175
133
 
176
- def self.doSSH(locationOrSSH, &block)
177
- if locationOrSSH.nil? || locationOrSSH == '@me'
134
+ def self.doConnection(locationOrConnection, &block)
135
+ if locationOrConnection.nil? || locationOrConnection == '@me'
178
136
  result = block.call(nil)
179
- elsif locationOrSSH.is_a?(String) || locationOrSSH.is_a?(Addressable::URI)
180
- uri = Addressable::URI.parse(locationOrSSH)
181
- raise Framework::PluginProcessError.new("#{id}: Unknown Protocol: #{uri.scheme}!") if uri.scheme != 'ssh'
182
-
183
- self.sshStart(locationOrSSH) do |ssh|
184
- result = block.call(ssh)
185
- end
137
+ elsif locationOrConnection.is_a?(String) || locationOrConnection.is_a?(Addressable::URI)
138
+ prompt = TTY::Prompt.new
139
+ logger = TTY::Logger.new
140
+ IO::Connection.tunnel(locationOrConnection, {}, {}, prompt, logger, &block)
186
141
  else
187
- result = block.call(locationOrSSH)
142
+ if locationOrConnection.is_a?(IO::Connection)
143
+ result = block.call(locationOrConnection)
144
+ else
145
+ prompt = TTY::Prompt.new
146
+ logger = TTY::Logger.new
147
+ result = block.call(IO::Connection.new(:SSH, IO::SSH.new(prompt, logger, locationOrConnection), prompt, logger))
148
+ end
188
149
  end
189
150
  result
190
151
  end
191
152
 
192
- # Deprecated
193
- def self.firewallAddServiceOverSSH(serviceName, locationOrSSH)
194
- self.firewallAddService(serviceName, locationOrSSH)
153
+ # DEPRECATED
154
+ def self.firewallAddServiceOverSSH(serviceName, locationOrConnection)
155
+ self.firewallAddService(serviceName, locationOrConnection)
195
156
  end
196
157
 
197
- # Deprecated
198
- def self.firewallAddPortOverSSH(portName, locationOrSSH)
199
- self.firewallAddPort(portName, locationOrSSH)
158
+ # DEPRECATED
159
+ def self.firewallAddPortOverSSH(portName, locationOrConnection)
160
+ self.firewallAddPort(portName, locationOrConnection)
200
161
  end
201
162
 
202
- def self.firewallAddService(serviceName, locationOrSSH = nil, dry = false)
203
- self.doSSH(locationOrSSH) do |ssh|
204
- command = 'firewall-cmd --permanent --add-service ' + serviceName.shellescape
205
- self.exec(command, ssh, true, dry)
206
- command = 'firewall-cmd --add-service ' + serviceName.shellescape
207
- self.exec(command, ssh, true, dry)
163
+ # DEPRECATED
164
+ def self.firewallAddService(serviceName, locationOrConnection = nil, dry = false)
165
+ self.doConnection(locationOrConnection) do |connection|
166
+ LMM::LinuxConnection.new(connection).firewallAddService(serviceName, { 'dry': dry })
208
167
  end
209
168
  end
210
169
 
211
- def self.firewallRemoveService(serviceName, locationOrSSH = nil, dry = false)
212
- self.doSSH(locationOrSSH) do |ssh|
213
- command = 'firewall-cmd --permanent --remove-service ' + serviceName.shellescape
214
- self.exec(command, ssh, false, dry)
215
- command = 'firewall-cmd --remove-service ' + serviceName.shellescape
216
- self.exec(command, ssh, false, dry)
170
+ # DEPRECATED
171
+ def self.firewallRemoveService(serviceName, locationOrConnection = nil, dry = false)
172
+ self.doConnection(locationOrConnection) do |connection|
173
+ LMM::LinuxConnection.new(connection).firewallRemoveService(serviceName, { 'dry': dry })
217
174
  end
218
175
  end
219
176
 
220
- def self.firewallAddPort(portName, locationOrSSH = nil, dry = false)
221
- self.doSSH(locationOrSSH) do |ssh|
222
- command = 'firewall-cmd --permanent --add-port ' + portName.shellescape
223
- self.exec(command, ssh, true, dry)
224
- command = 'firewall-cmd --add-port ' + portName.shellescape
225
- self.exec(command, ssh, true, dry)
177
+ # DEPRECATED
178
+ def self.firewallAddPort(portName, locationOrConnection = nil, dry = false)
179
+ self.doConnection(locationOrConnection) do |connection|
180
+ LMM::LinuxConnection.new(connection).firewallAddPort(portName, { 'dry': dry })
226
181
  end
227
182
  end
228
183
 
229
- def self.firewallRemovePort(portName, locationOrSSH = nil, dry = false)
230
- self.doSSH(locationOrSSH) do |ssh|
231
- command = 'firewall-cmd --permanent --remove-port ' + portName.shellescape
232
- self.exec(command, ssh, false, dry)
233
- command = 'firewall-cmd --remove-port ' + portName.shellescape
234
- self.exec(command, ssh, false, dry)
184
+ # DEPRECATED
185
+ def self.firewallRemovePort(portName, locationOrConnection = nil, dry = false)
186
+ self.doConnection(locationOrConnection) do |connection|
187
+ LMM::LinuxConnection.new(connection).firewallRemovePort(portName, { 'dry': dry })
235
188
  end
236
189
  end
237
190
 
@@ -255,6 +208,7 @@ module ConfigLMM
255
208
  names
256
209
  end
257
210
 
211
+ # DEPRECATED
258
212
  def self.createCertificateOverSSH(ssh)
259
213
  dir = "/etc/letsencrypt/live/Wildcard/"
260
214
  self.sshExec!(ssh, "mkdir -p #{dir}")
@@ -266,52 +220,59 @@ module ConfigLMM
266
220
  dir
267
221
  end
268
222
 
269
- def self.configurePodmanServiceOverSSH(user, homedir, userComment, distroInfo, ssh)
270
- Framework::LinuxApp.ensurePackages([PODMAN_PACKAGE], ssh)
271
- addUserCmd = "#{distroInfo['CreateServiceUser']} --home-dir '#{homedir}' --create-home --comment '#{userComment}' #{user}"
272
- self.sshExec!(ssh, addUserCmd, true)
273
- self.sshExec!(ssh, "chmod o-rwx #{homedir}")
274
- self.createSubuidsOverSSH(user, distroInfo, ssh)
275
- self.sshExec!(ssh, "loginctl enable-linger #{user}")
276
- self.sshExec!(ssh, "su --login #{user} --shell /bin/sh --command 'mkdir -p #{SYSTEMD_CONTAINERS_PATH}'")
223
+ # DEPRECATED
224
+ def self.configurePodmanService(user, homedir, userComment, distroInfo, connection)
225
+ self.configurePodmanServiceOverSSH(user, homedir, userComment, distroInfo, connection)
277
226
  end
278
227
 
279
- def self.addRepo(name, distroInfo, ssh = nil)
280
- if distroInfo['Name'] == 'openSUSE Leap'
281
- if ssh
282
- versionId = ssh.exec!('cat /etc/os-release | grep "^VERSION_ID=" | cut -d "=" -f 2').strip.gsub('"', '')
283
- self.sshExec!(ssh, "zypper addrepo https://download.opensuse.org/repositories/#{name}/#{versionId}/#{name}.repo", true)
284
- self.sshExec!(ssh, "zypper --gpg-auto-import-keys refresh")
285
- else
286
- versionId = `cat /etc/os-release | grep "^VERSION_ID=" | cut -d "=" -f 2`.strip.gsub('"', '')
287
- `zypper addrepo https://download.opensuse.org/repositories/#{name}/#{versionId}/#{name}.repo`
288
- `zypper --gpg-auto-import-keys refresh`
289
- end
228
+ # DEPRECATED
229
+ def self.configurePodmanServiceOverSSH(user, homedir, userComment, distroInfo, connectionOrSSH)
230
+ if connectionOrSSH.is_a?(IO::Connection)
231
+ Framework::LinuxApp.ensurePackages([PODMAN_PACKAGE], connectionOrSSH)
232
+ addUserCmd = "#{distroInfo['CreateServiceUser']} --home-dir '#{homedir}' --create-home --comment '#{userComment}' #{user}"
233
+ connectionOrSSH.exec(addUserCmd, true)
234
+ connectionOrSSH.exec("chmod o-rwx #{homedir}")
235
+ self.createSubuids(user, distroInfo, connectionOrSSH)
236
+ connectionOrSSH.exec("loginctl enable-linger #{user}")
237
+ connectionOrSSH.exec("su --login #{user} --shell /bin/sh --command 'mkdir -p #{SYSTEMD_CONTAINERS_PATH}'")
290
238
  else
291
- # TODO
239
+ Framework::LinuxApp.ensurePackages([PODMAN_PACKAGE], connectionOrSSH)
240
+ addUserCmd = "#{distroInfo['CreateServiceUser']} --home-dir '#{homedir}' --create-home --comment '#{userComment}' #{user}"
241
+ self.sshExec!(connectionOrSSH, addUserCmd, true)
242
+ self.sshExec!(connectionOrSSH, "chmod o-rwx #{homedir}")
243
+ self.createSubuidsOverSSH(user, distroInfo, connectionOrSSH)
244
+ self.sshExec!(connectionOrSSH, "loginctl enable-linger #{user}")
245
+ self.sshExec!(connectionOrSSH, "su --login #{user} --shell /bin/sh --command 'mkdir -p #{SYSTEMD_CONTAINERS_PATH}'")
292
246
  end
293
247
  end
294
248
 
249
+ # DEPRECATED
250
+ def self.createSubuids(user, distroInfo, connection)
251
+ connection.exec("#{distroInfo['ModifyUser']} --add-subuids 100000-165535 --add-subgids 100000-165535 #{user}")
252
+ end
253
+
254
+ # DEPRECATED
295
255
  def self.createSubuidsOverSSH(user, distroInfo, ssh)
296
256
  self.sshExec!(ssh, "#{distroInfo['ModifyUser']} --add-subuids 100000-165535 --add-subgids 100000-165535 #{user}")
297
257
  end
298
258
 
299
- def self.distroID(ssh = nil)
300
- if ssh
301
- ssh.exec!('cat /etc/os-release | grep "^ID=" | cut -d "=" -f 2').strip.gsub('"', '')
302
- else
303
- `cat /etc/os-release | grep "^ID=" | cut -d "=" -f 2`.strip.gsub('"', '')
259
+ # DEPRECATED
260
+ def self.distroID(connection = nil)
261
+ id = nil
262
+ self.doConnection(connection) do |connection|
263
+ id = LMM::LinuxConnection.new(connection).distroID
304
264
  end
265
+ id
305
266
  end
306
267
 
307
- def self.currentDistroInfo(ssh)
308
- self.distroInfo(self.distroID(ssh))
268
+ # DEPRECATED
269
+ def self.currentDistroInfo(connection)
270
+ self.distroInfo(self.distroID(connection))
309
271
  end
310
272
 
273
+ # DEPRECATED
311
274
  def self.distroInfo(distroID)
312
- distributions = YAML.load_file(LINUX_FOLDER + 'Distributions.yaml')
313
- raise Framework::PluginProcessError.new("Unknown Linux Distro: #{distroID}!") unless distributions.key?(distroID)
314
- distributions[distroID]
275
+ YAML.load_file(LINUX_FOLDER + 'Distributions.yaml')[distroID]
315
276
  end
316
277
 
317
278
  end
@@ -11,12 +11,15 @@ require 'fileutils'
11
11
  module ConfigLMM
12
12
  module Framework
13
13
 
14
+ # DEPRECATED
14
15
  class NginxApp < Framework::Plugin
15
16
 
17
+ # DEPRECATED
16
18
  NGINX_PACKAGE = 'nginx'
17
19
  CONFIG_DIR = '/etc/nginx/'
18
20
  WWW_DIR = '/srv/www/'
19
21
 
22
+ # DEPRECATED
20
23
  def writeNginxConfig(dir, name, id, target, activeState, context, options)
21
24
  outputFolder = options['output']
22
25
 
@@ -29,6 +32,7 @@ module ConfigLMM
29
32
  renderTemplate(template, target, outputFolder + '/nginx/servers-lmm/' + name + '.conf', options)
30
33
  end
31
34
 
35
+ # DEPRECATED
32
36
  def deployNginxConfig(id, target, activeState, context, options)
33
37
  outputFolder = options['output'] + '/nginx/servers-lmm'
34
38
 
@@ -48,46 +52,59 @@ module ConfigLMM
48
52
  end
49
53
  end
50
54
 
51
- def cleanupNginxConfig(name, id, state, context, options, ssh = nil)
52
- rm('/etc/nginx/servers-lmm/' + name + '.conf', options['dry'], ssh)
55
+ # DEPRECATED
56
+ def cleanupNginxConfig(name, id, state, context, options, connection)
57
+ connection.rm('/etc/nginx/servers-lmm/' + name + '.conf', options['dry'])
53
58
  end
54
59
 
55
- def self.prepareNginxConfig(target, ssh = nil)
56
- if ssh
57
- target['NginxVersion'] = self.sshExec!(ssh, 'nginx -v').strip.split('/')[1].to_f
60
+ # DEPRECATED
61
+ def self.prepareNginxConfig(target, connectionOrSSH = nil)
62
+ if connectionOrSSH.is_a?(IO::Connection)
63
+ target['NginxVersion'] = connectionOrSSH.exec('nginx -v').strip.split('/')[1].to_f
64
+ elsif connectionOrSSH
65
+ target['NginxVersion'] = self.sshExec!(connectionOrSSH, 'nginx -v').strip.split('/')[1].to_f
58
66
  else
59
67
  target['NginxVersion'] = `nginx -v`.strip.split('/')[1].to_f
60
68
  end
61
69
  end
62
70
 
63
- def self.reload(ssh = nil, dry = false)
64
- self.exec("systemctl reload nginx", ssh, false, dry)
71
+ # DEPRECATED
72
+ def self.reload(connection = nil, dry = false)
73
+ if connection.is_a?(IO::Connection)
74
+ connection.exec("systemctl reload nginx", false, { 'dry' => dry })
75
+ else
76
+ self.exec("systemctl reload nginx", connection, false, dry)
77
+ end
65
78
  end
66
79
 
67
- def self.ensurePackage(ssh = nil)
68
- Framework::LinuxApp.ensurePackages([NGINX_PACKAGE], ssh)
69
- Framework::LinuxApp.ensureServiceAutoStartOverSSH(NGINX_PACKAGE, ssh)
80
+ # DEPRECATED
81
+ def self.ensurePackage(connection = nil)
82
+ Framework::LinuxApp.ensurePackages([NGINX_PACKAGE], connection)
83
+ Framework::LinuxApp.ensureServiceAutoStartOverSSH(NGINX_PACKAGE, connection)
70
84
  end
71
85
 
72
- def useNginxProxy(dir, configName, id, target, activeState, state, context, options, ssh)
73
- self.class.ensurePackage(ssh)
74
- self.class.prepareNginxConfig(target, ssh)
86
+ # DEPRECATED
87
+ def useNginxProxy(dir, configName, id, target, activeState, state, context, options, connectionOrSSH)
88
+ self.class.ensurePackage(connectionOrSSH)
89
+ self.class.prepareNginxConfig(target, connectionOrSSH)
75
90
  self.writeNginxConfig(dir, configName, id, target, state, context, options)
76
91
  self.deployNginxConfig(id, target, activeState, context, options)
77
- Framework::LinuxApp.startServiceOverSSH(NGINX_PACKAGE, ssh)
78
- self.class.reload(ssh)
92
+ Framework::LinuxApp.startServiceOverSSH(NGINX_PACKAGE, connectionOrSSH)
93
+ self.class.reload(connectionOrSSH)
79
94
  end
80
95
 
81
- def deployNginxProxyConfig(server, name, id, target, activeState, state, context, options, ssh)
96
+ # DEPRECATED
97
+ def deployNginxProxyConfig(server, name, id, target, activeState, state, context, options, connectionOrSSH)
82
98
  target = target.dup
83
99
  target['Proxy'] = server
84
100
  target['Name'] = name if name
85
101
  target['ConfigName'] = target['Name']
86
- useNginxProxy(__dir__ + '/../../../../Plugins/Apps/Nginx', 'proxy', id, target, activeState, state, context, options, ssh)
102
+ useNginxProxy(__dir__ + '/../../../../Plugins/Apps/Nginx', 'proxy', id, target, activeState, state, context, options, connectionOrSSH)
87
103
  end
88
104
 
89
105
  private
90
106
 
107
+ # DEPRECATED
91
108
  def updateTargetConfig(target)
92
109
  target['TLS'] = true if target['TLS'].nil?
93
110