aethernal-agent 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
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: []