aethernal-agent 0.1.10

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 (87) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.gitlab-ci.yml +23 -0
  4. data/.rspec +2 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/Gemfile +6 -0
  8. data/Gemfile.lock +107 -0
  9. data/README.md +35 -0
  10. data/Rakefile +31 -0
  11. data/Vagrantfile +32 -0
  12. data/aethernal-agent.gemspec +45 -0
  13. data/bin/console +14 -0
  14. data/bin/run-aa-for-test +35 -0
  15. data/bin/setup +8 -0
  16. data/exe/aa-web +7 -0
  17. data/lib/aethernal_agent.rb +34 -0
  18. data/lib/aethernal_agent/apache/apache.rb +70 -0
  19. data/lib/aethernal_agent/apache/templates/aa-user.conf.erb +21 -0
  20. data/lib/aethernal_agent/app.rb +317 -0
  21. data/lib/aethernal_agent/apt.rb +30 -0
  22. data/lib/aethernal_agent/errors.rb +17 -0
  23. data/lib/aethernal_agent/filesystem.rb +178 -0
  24. data/lib/aethernal_agent/loader.rb +56 -0
  25. data/lib/aethernal_agent/manifest.rb +6 -0
  26. data/lib/aethernal_agent/operation.rb +51 -0
  27. data/lib/aethernal_agent/operation_pool.rb +46 -0
  28. data/lib/aethernal_agent/plugins/deluge/deluge.rb +65 -0
  29. data/lib/aethernal_agent/plugins/deluge/manifest.yml +51 -0
  30. data/lib/aethernal_agent/plugins/deluge/meta/deluge.png +0 -0
  31. data/lib/aethernal_agent/plugins/deluge/templates/auth.erb +2 -0
  32. data/lib/aethernal_agent/plugins/deluge/templates/core.conf.erb +95 -0
  33. data/lib/aethernal_agent/plugins/deluge/templates/deluge-web.service.erb +12 -0
  34. data/lib/aethernal_agent/plugins/deluge/templates/deluge.apache.conf.erb +9 -0
  35. data/lib/aethernal_agent/plugins/deluge/templates/deluged.service.erb +12 -0
  36. data/lib/aethernal_agent/plugins/deluge/templates/hostlist.conf.erb +14 -0
  37. data/lib/aethernal_agent/plugins/deluge/templates/web.conf.erb +24 -0
  38. data/lib/aethernal_agent/plugins/filebrowser/filebrowser.rb +45 -0
  39. data/lib/aethernal_agent/plugins/filebrowser/files/filebrowser.service +12 -0
  40. data/lib/aethernal_agent/plugins/filebrowser/manifest.yml +51 -0
  41. data/lib/aethernal_agent/plugins/filebrowser/meta/filebrowser.png +0 -0
  42. data/lib/aethernal_agent/plugins/filebrowser/templates/filebrowser.apache.conf.erb +6 -0
  43. data/lib/aethernal_agent/plugins/gitea/files/gitea.service +12 -0
  44. data/lib/aethernal_agent/plugins/gitea/gitea.rb +64 -0
  45. data/lib/aethernal_agent/plugins/gitea/manifest.yml +53 -0
  46. data/lib/aethernal_agent/plugins/gitea/meta/gitea.png +0 -0
  47. data/lib/aethernal_agent/plugins/gitea/templates/app.ini.erb +68 -0
  48. data/lib/aethernal_agent/plugins/gitea/templates/gitea.apache.conf.erb +6 -0
  49. data/lib/aethernal_agent/plugins/olaris/manifest.yml +52 -0
  50. data/lib/aethernal_agent/plugins/olaris/meta/olaris.png +0 -0
  51. data/lib/aethernal_agent/plugins/olaris/olaris.rb +35 -0
  52. data/lib/aethernal_agent/plugins/olaris/templates/olaris.apache.conf.erb +6 -0
  53. data/lib/aethernal_agent/plugins/olaris/templates/olaris.service.erb +12 -0
  54. data/lib/aethernal_agent/plugins/ombi/manifest.yml +57 -0
  55. data/lib/aethernal_agent/plugins/ombi/meta/ombi.jpeg +0 -0
  56. data/lib/aethernal_agent/plugins/ombi/ombi.rb +81 -0
  57. data/lib/aethernal_agent/plugins/ombi/templates/ombi.apache.conf.erb +6 -0
  58. data/lib/aethernal_agent/plugins/ombi/templates/ombi.service.erb +14 -0
  59. data/lib/aethernal_agent/plugins/plex/files/plex.service +26 -0
  60. data/lib/aethernal_agent/plugins/plex/manifest.yml +49 -0
  61. data/lib/aethernal_agent/plugins/plex/meta/plex.png +0 -0
  62. data/lib/aethernal_agent/plugins/plex/plex.rb +65 -0
  63. data/lib/aethernal_agent/plugins/plex/templates/Preferences.xml.erb +2 -0
  64. data/lib/aethernal_agent/plugins/radarr/files/radarr.service +13 -0
  65. data/lib/aethernal_agent/plugins/radarr/manifest.yml +68 -0
  66. data/lib/aethernal_agent/plugins/radarr/meta/radarr.png +0 -0
  67. data/lib/aethernal_agent/plugins/radarr/radarr.rb +72 -0
  68. data/lib/aethernal_agent/plugins/radarr/templates/config.xml.erb +16 -0
  69. data/lib/aethernal_agent/plugins/radarr/templates/radarr.apache.conf.erb +6 -0
  70. data/lib/aethernal_agent/plugins/sonarr/files/sonarr.service +13 -0
  71. data/lib/aethernal_agent/plugins/sonarr/manifest.yml +66 -0
  72. data/lib/aethernal_agent/plugins/sonarr/meta/sonarr.jpeg +0 -0
  73. data/lib/aethernal_agent/plugins/sonarr/sonarr.rb +70 -0
  74. data/lib/aethernal_agent/plugins/sonarr/templates/config.xml.erb +16 -0
  75. data/lib/aethernal_agent/plugins/sonarr/templates/sonarr.apache.conf.erb +6 -0
  76. data/lib/aethernal_agent/plugins/vnc/files/xstartup +9 -0
  77. data/lib/aethernal_agent/plugins/vnc/manifest.yml +41 -0
  78. data/lib/aethernal_agent/plugins/vnc/meta/vnc.png +0 -0
  79. data/lib/aethernal_agent/plugins/vnc/templates/vnc.service.erb +14 -0
  80. data/lib/aethernal_agent/plugins/vnc/vnc.rb +41 -0
  81. data/lib/aethernal_agent/systemd.rb +123 -0
  82. data/lib/aethernal_agent/template.rb +57 -0
  83. data/lib/aethernal_agent/utils.rb +107 -0
  84. data/lib/aethernal_agent/version.rb +3 -0
  85. data/lib/aethernal_agent/webserver/api.rb +77 -0
  86. data/lib/aethernal_agent/webserver/core.rb +32 -0
  87. metadata +257 -0
@@ -0,0 +1,107 @@
1
+ require 'json'
2
+ module AethernalAgent
3
+ module Utils
4
+ def check_manifest(manifest)
5
+ if manifest.required_aethernal_agent_version
6
+ AethernalAgent.logger.debug("Checking required aethernal_agent version")
7
+ return Gem::Dependency.new('', manifest.required_aethernal_agent_version).match?('', AethernalAgent::VERSION)
8
+ end
9
+ end
10
+
11
+ def run_command(command, options = {})
12
+ AethernalAgent.logger.info "Running command: '#{command}"
13
+ # TODO: Pipe this to get acutal output of commands to return error messages when stderr is used
14
+ system(command)
15
+ end
16
+
17
+ def run_as(user, command)
18
+ run_command("sudo -iu #{user} #{command}")
19
+ end
20
+
21
+ def print_system(command)
22
+ AethernalAgent.logger.warn "pring_system is depcrated"
23
+ AethernalAgent.logger.info "Running command: '#{command}'"
24
+ system(command)
25
+ end
26
+
27
+ def random_string(length = 16)
28
+ o = [('a'..'z'),('A'..'Z')].map{|i| i.to_a}.flatten
29
+ string = (0...length).map{ o[rand(o.length)] }.join
30
+ return string
31
+ end
32
+
33
+ def check_port(port)
34
+ return false unless port
35
+ return false if port == nil
36
+ begin
37
+ server = TCPServer.new("127.0.0.1", port)
38
+ server.close
39
+ rescue Errno::EADDRINUSE, Errno::EACCES, TypeError, Errno::ECONNREFUSED, Errno::EHOSTUNREACH
40
+ return false
41
+ end
42
+ return true
43
+ end
44
+
45
+ def random_port(range = (20000..50000))
46
+ port = range.to_a.sample
47
+ if port && check_port(port)
48
+ return port.to_i
49
+ else
50
+ random_port(range)
51
+ end
52
+ end
53
+
54
+ def get_global_config(key)
55
+ AethernalAgent.logger.debug("Getting value for key '#{key}'")
56
+
57
+ begin
58
+ config = JSON.parse(File.read(global_config_path))
59
+ rescue Errno::ENOENT
60
+ config = {}
61
+ end
62
+
63
+ AethernalAgent.logger.debug("Value is '#{config[key.to_s]}'")
64
+ return config[key.to_s]
65
+ end
66
+
67
+ def set_global_config(key, value)
68
+ AethernalAgent.logger.debug("Setting key '#{key}' to value '#{value}'")
69
+
70
+ if File.exists?(global_config_path)
71
+ begin
72
+ config = JSON.parse(File.read(global_config_path))
73
+ rescue StandardError => e
74
+ raise "Could not read/parse global config: '#{e}'"
75
+ end
76
+ else
77
+ AethernalAgent.logger.debug("Config file does not exist yet, creating new.")
78
+ config = {}
79
+ end
80
+
81
+ config[key.to_s] = value
82
+ begin
83
+ file = File.open(global_config_path, "w")
84
+ file.write(JSON.dump(config))
85
+ file.close
86
+ rescue StandardError => e
87
+ raise "Could not write out global config file: '#{e}'"
88
+ end
89
+
90
+ FileUtils.chown("root","root", global_config_path)
91
+ end
92
+
93
+ def ubuntu_release
94
+ return "18.04"
95
+ end
96
+
97
+ def prepare_test_config
98
+ File.open(global_config_path, "w") do |f|
99
+ f.write({hostname: "test-server", container_name: "test-container"}.to_json)
100
+ end
101
+ end
102
+
103
+ def global_config_path
104
+ "/etc/aethernal_agent.config"
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,3 @@
1
+ module AethernalAgent
2
+ VERSION = "0.1.10"
3
+ end
@@ -0,0 +1,77 @@
1
+ module AethernalAgent
2
+ module Webserver
3
+ require 'sinatra/base'
4
+ require 'sinatra/namespace'
5
+ require 'aethernal_agent'
6
+
7
+ class Api < Sinatra::Base
8
+ include AethernalAgent::Utils
9
+ register Sinatra::Namespace
10
+
11
+ configure do
12
+ set :loader, AethernalAgent::Loader.new
13
+ end
14
+
15
+ set :bind, '0.0.0.0'
16
+
17
+ use Rack::Auth::Basic, "Protected Area" do |username, password|
18
+ username == @@username && password == @@password
19
+ end
20
+
21
+ namespace "/v1" do
22
+ get "/port/?:min?/?:max?" do
23
+ min = params[:min] || 6000
24
+ max = params[:max] || 40000
25
+ return random_port(min..max).to_json
26
+ end
27
+
28
+ get "/version" do
29
+ return AethernalAgent::VERSION
30
+ end
31
+
32
+ get "/plugins" do
33
+ return settings.loader.loaded_manifests.collect{|x| x.to_h}.to_json
34
+ end
35
+
36
+ get "/operations" do
37
+ {size: @@pool.operation_size}.to_json
38
+ end
39
+
40
+ get "/operations/:uuid" do
41
+ op = @@pool.get_operation(params[:uuid])
42
+ if op.present?
43
+ {operation: op.attributes, error: nil}.to_json
44
+ else
45
+ status 404
46
+ body do
47
+ {operation: nil, error: "not found"}.to_json
48
+ end
49
+ end
50
+ end
51
+
52
+ post "/plugins/:app_name/:method_name/?:wait?" do
53
+ app = params['app_name']
54
+ method = params['method_name']
55
+ opts = JSON.parse(request.body.read)
56
+ o = AethernalAgent::Operation.new(app, method, opts)
57
+
58
+ unless params['wait'].nil?
59
+ o.run
60
+ o.to_json
61
+ else
62
+ @@pool.add_operation(o)
63
+ o.uuid.to_json
64
+ end
65
+ end
66
+ end
67
+
68
+ def self.start(user, password, pool)
69
+ @@username = user
70
+ @@password = password
71
+ @@pool = pool
72
+ AethernalAgent.logger.debug("Starting API with username #{@@username} and password #{@@password}")
73
+ run!
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,32 @@
1
+ require 'aethernal_agent/utils'
2
+ require "aethernal_agent/webserver/api"
3
+
4
+ module AethernalAgent
5
+ module Webserver
6
+ class Core
7
+ include AethernalAgent::Utils
8
+
9
+ def start
10
+ username = get_global_config("web_username")
11
+ password = get_global_config("web_password")
12
+ if username.nil? || password.nil?
13
+ AethernalAgent.logger.info("No username or password found in config, creating one.")
14
+
15
+ username = random_string
16
+ password = random_string
17
+
18
+ set_global_config("web_username", username)
19
+ set_global_config("web_password", password)
20
+ end
21
+
22
+ AethernalAgent.logger.info("Starting BOSS - v#{AethernalAgent::VERSION}")
23
+
24
+ pool = AethernalAgent::OperationPool.new(3)
25
+ threads = []
26
+ threads << Thread.new { AethernalAgent::Webserver::Api.start(username, password, pool) }
27
+ threads << Thread.new { pool.start }
28
+ threads.each(&:join)
29
+ end
30
+ end
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,257 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aethernal-agent
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.10
5
+ platform: ruby
6
+ authors:
7
+ - Maran
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2020-05-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: serverspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sinatra
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.0.7
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 2.0.7
97
+ - !ruby/object:Gem::Dependency
98
+ name: sinatra-contrib
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: sqlite3
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: httparty
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Install and configure apps on the go.
140
+ email:
141
+ - maran@bytesized-hosting.com
142
+ executables:
143
+ - aa-web
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".gitlab-ci.yml"
149
+ - ".rspec"
150
+ - ".ruby-gemset"
151
+ - ".ruby-version"
152
+ - Gemfile
153
+ - Gemfile.lock
154
+ - README.md
155
+ - Rakefile
156
+ - Vagrantfile
157
+ - aethernal-agent.gemspec
158
+ - bin/console
159
+ - bin/run-aa-for-test
160
+ - bin/setup
161
+ - exe/aa-web
162
+ - lib/aethernal_agent.rb
163
+ - lib/aethernal_agent/apache/apache.rb
164
+ - lib/aethernal_agent/apache/templates/aa-user.conf.erb
165
+ - lib/aethernal_agent/app.rb
166
+ - lib/aethernal_agent/apt.rb
167
+ - lib/aethernal_agent/errors.rb
168
+ - lib/aethernal_agent/filesystem.rb
169
+ - lib/aethernal_agent/loader.rb
170
+ - lib/aethernal_agent/manifest.rb
171
+ - lib/aethernal_agent/operation.rb
172
+ - lib/aethernal_agent/operation_pool.rb
173
+ - lib/aethernal_agent/plugins/deluge/deluge.rb
174
+ - lib/aethernal_agent/plugins/deluge/manifest.yml
175
+ - lib/aethernal_agent/plugins/deluge/meta/deluge.png
176
+ - lib/aethernal_agent/plugins/deluge/templates/auth.erb
177
+ - lib/aethernal_agent/plugins/deluge/templates/core.conf.erb
178
+ - lib/aethernal_agent/plugins/deluge/templates/deluge-web.service.erb
179
+ - lib/aethernal_agent/plugins/deluge/templates/deluge.apache.conf.erb
180
+ - lib/aethernal_agent/plugins/deluge/templates/deluged.service.erb
181
+ - lib/aethernal_agent/plugins/deluge/templates/hostlist.conf.erb
182
+ - lib/aethernal_agent/plugins/deluge/templates/web.conf.erb
183
+ - lib/aethernal_agent/plugins/filebrowser/filebrowser.rb
184
+ - lib/aethernal_agent/plugins/filebrowser/files/filebrowser.service
185
+ - lib/aethernal_agent/plugins/filebrowser/manifest.yml
186
+ - lib/aethernal_agent/plugins/filebrowser/meta/filebrowser.png
187
+ - lib/aethernal_agent/plugins/filebrowser/templates/filebrowser.apache.conf.erb
188
+ - lib/aethernal_agent/plugins/gitea/files/gitea.service
189
+ - lib/aethernal_agent/plugins/gitea/gitea.rb
190
+ - lib/aethernal_agent/plugins/gitea/manifest.yml
191
+ - lib/aethernal_agent/plugins/gitea/meta/gitea.png
192
+ - lib/aethernal_agent/plugins/gitea/templates/app.ini.erb
193
+ - lib/aethernal_agent/plugins/gitea/templates/gitea.apache.conf.erb
194
+ - lib/aethernal_agent/plugins/olaris/manifest.yml
195
+ - lib/aethernal_agent/plugins/olaris/meta/olaris.png
196
+ - lib/aethernal_agent/plugins/olaris/olaris.rb
197
+ - lib/aethernal_agent/plugins/olaris/templates/olaris.apache.conf.erb
198
+ - lib/aethernal_agent/plugins/olaris/templates/olaris.service.erb
199
+ - lib/aethernal_agent/plugins/ombi/manifest.yml
200
+ - lib/aethernal_agent/plugins/ombi/meta/ombi.jpeg
201
+ - lib/aethernal_agent/plugins/ombi/ombi.rb
202
+ - lib/aethernal_agent/plugins/ombi/templates/ombi.apache.conf.erb
203
+ - lib/aethernal_agent/plugins/ombi/templates/ombi.service.erb
204
+ - lib/aethernal_agent/plugins/plex/files/plex.service
205
+ - lib/aethernal_agent/plugins/plex/manifest.yml
206
+ - lib/aethernal_agent/plugins/plex/meta/plex.png
207
+ - lib/aethernal_agent/plugins/plex/plex.rb
208
+ - lib/aethernal_agent/plugins/plex/templates/Preferences.xml.erb
209
+ - lib/aethernal_agent/plugins/radarr/files/radarr.service
210
+ - lib/aethernal_agent/plugins/radarr/manifest.yml
211
+ - lib/aethernal_agent/plugins/radarr/meta/radarr.png
212
+ - lib/aethernal_agent/plugins/radarr/radarr.rb
213
+ - lib/aethernal_agent/plugins/radarr/templates/config.xml.erb
214
+ - lib/aethernal_agent/plugins/radarr/templates/radarr.apache.conf.erb
215
+ - lib/aethernal_agent/plugins/sonarr/files/sonarr.service
216
+ - lib/aethernal_agent/plugins/sonarr/manifest.yml
217
+ - lib/aethernal_agent/plugins/sonarr/meta/sonarr.jpeg
218
+ - lib/aethernal_agent/plugins/sonarr/sonarr.rb
219
+ - lib/aethernal_agent/plugins/sonarr/templates/config.xml.erb
220
+ - lib/aethernal_agent/plugins/sonarr/templates/sonarr.apache.conf.erb
221
+ - lib/aethernal_agent/plugins/vnc/files/xstartup
222
+ - lib/aethernal_agent/plugins/vnc/manifest.yml
223
+ - lib/aethernal_agent/plugins/vnc/meta/vnc.png
224
+ - lib/aethernal_agent/plugins/vnc/templates/vnc.service.erb
225
+ - lib/aethernal_agent/plugins/vnc/vnc.rb
226
+ - lib/aethernal_agent/systemd.rb
227
+ - lib/aethernal_agent/template.rb
228
+ - lib/aethernal_agent/utils.rb
229
+ - lib/aethernal_agent/version.rb
230
+ - lib/aethernal_agent/webserver/api.rb
231
+ - lib/aethernal_agent/webserver/core.rb
232
+ homepage: https://aethernal.host
233
+ licenses: []
234
+ metadata:
235
+ homepage_uri: https://aethernal.host
236
+ source_code_uri: http://gitlab.com/olaris/aethernal_agent
237
+ changelog_uri: http://gitlab.com/olaris/aethernal_agent
238
+ post_install_message:
239
+ rdoc_options: []
240
+ require_paths:
241
+ - lib
242
+ required_ruby_version: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - ">="
245
+ - !ruby/object:Gem::Version
246
+ version: '0'
247
+ required_rubygems_version: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
252
+ requirements: []
253
+ rubygems_version: 3.0.3
254
+ signing_key:
255
+ specification_version: 4
256
+ summary: Aethernal Agent for Aethernal.host.
257
+ test_files: []