openc3 5.5.0 → 5.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/config/_canvas_values.yaml +41 -0
- data/data/config/_graph_params.yaml +25 -0
- data/data/config/graph_settings.yaml +52 -0
- data/data/config/interface_modifiers.yaml +4 -0
- data/data/config/microservice.yaml +5 -1
- data/data/config/screen.yaml +44 -50
- data/data/config/settings.yaml +144 -0
- data/data/config/widgets.yaml +1744 -1493
- data/lib/openc3/models/interface_model.rb +5 -2
- data/lib/openc3/models/microservice_model.rb +6 -5
- data/lib/openc3/models/plugin_model.rb +3 -1
- data/lib/openc3/operators/microservice_operator.rb +2 -2
- data/lib/openc3/utilities/redis_secrets.rb +4 -4
- data/lib/openc3/utilities/secrets.rb +5 -5
- data/lib/openc3/version.rb +5 -5
- data/templates/target/targets/TARGET/screens/status.txt +1 -2
- metadata +6 -3
- data/lib/openc3/models/traefik_model.rb +0 -47
@@ -257,12 +257,15 @@ module OpenC3
|
|
257
257
|
@log_raw = true
|
258
258
|
|
259
259
|
when 'SECRET'
|
260
|
-
parser.verify_num_parameters(3,
|
260
|
+
parser.verify_num_parameters(3, 5, "#{keyword} <Secret Type: ENV or FILE> <Secret Name> <Environment Variable Name or File Path> <Option Name (Optional)> <Secret Store Name (Optional)>")
|
261
261
|
@secrets << parameters[0..2]
|
262
|
-
if parameters[3]
|
262
|
+
if ConfigParser.handle_nil(parameters[3])
|
263
263
|
# Option Name, Secret Name
|
264
264
|
@secret_options << [parameters[3], parameters[1]]
|
265
265
|
end
|
266
|
+
if ConfigParser.handle_nil(parameters[4])
|
267
|
+
@secrets[-1] << parameters[4]
|
268
|
+
end
|
266
269
|
|
267
270
|
else
|
268
271
|
raise ConfigParser::Error.new(parser, "Unknown keyword and parameters for Interface/Router: #{keyword} #{parameters.join(" ")}")
|
@@ -23,7 +23,6 @@
|
|
23
23
|
require 'openc3/top_level'
|
24
24
|
require 'openc3/models/model'
|
25
25
|
require 'openc3/models/metric_model'
|
26
|
-
require 'openc3/models/traefik_model'
|
27
26
|
require 'openc3/utilities/bucket'
|
28
27
|
|
29
28
|
module OpenC3
|
@@ -193,8 +192,12 @@ module OpenC3
|
|
193
192
|
parser.verify_num_parameters(1, 1, "#{keyword} <Container Image Name>")
|
194
193
|
@container = parameters[0]
|
195
194
|
when 'SECRET'
|
196
|
-
parser.verify_num_parameters(3,
|
197
|
-
|
195
|
+
parser.verify_num_parameters(3, 4, "#{keyword} <Secret Type: ENV or FILE> <Secret Name> <Environment Variable Name or File Path> <Secret Store Name (Optional)>")
|
196
|
+
if ConfigParser.handle_nil(parameters[3])
|
197
|
+
@secrets << parameters.dup
|
198
|
+
else
|
199
|
+
@secrets << parameters[0..2]
|
200
|
+
end
|
198
201
|
when 'ROUTE_PREFIX'
|
199
202
|
parser.verify_num_parameters(1, 1, "#{keyword} <Route Prefix>")
|
200
203
|
@prefix = parameters[0]
|
@@ -225,7 +228,6 @@ module OpenC3
|
|
225
228
|
end
|
226
229
|
end
|
227
230
|
unless validate_only
|
228
|
-
TraefikModel.register_route(microservice_name: @name, port: @ports[0][0], prefix: @prefix) if @ports[0] and ports[0][0] and @prefix
|
229
231
|
ConfigTopic.write({ kind: 'created', type: 'microservice', name: @name, plugin: @plugin }, scope: @scope)
|
230
232
|
end
|
231
233
|
end
|
@@ -235,7 +237,6 @@ module OpenC3
|
|
235
237
|
@bucket.list_objects(bucket: ENV['OPENC3_CONFIG_BUCKET'], prefix: prefix).each do |object|
|
236
238
|
@bucket.delete_object(bucket: ENV['OPENC3_CONFIG_BUCKET'], key: object.key)
|
237
239
|
end
|
238
|
-
TraefikModel.unregister_route(microservice_name: @name, port: @ports[0][0], prefix: @prefix) if @ports[0] and ports[0][0] and @prefix
|
239
240
|
ConfigTopic.write({ kind: 'deleted', type: 'microservice', name: @name, plugin: @plugin }, scope: @scope)
|
240
241
|
rescue Exception => error
|
241
242
|
Logger.error("Error undeploying microservice model #{@name} in scope #{@scope} due to #{error}")
|
@@ -44,7 +44,7 @@ module OpenC3
|
|
44
44
|
class PluginModel < Model
|
45
45
|
PRIMARY_KEY = 'openc3_plugins'
|
46
46
|
# Reserved VARIABLE names. See local_mode.rb: update_local_plugin()
|
47
|
-
RESERVED_VARIABLE_NAMES = ['target_name', 'microservice_name']
|
47
|
+
RESERVED_VARIABLE_NAMES = ['target_name', 'microservice_name', 'scope']
|
48
48
|
|
49
49
|
attr_accessor :variables
|
50
50
|
attr_accessor :plugin_txt_lines
|
@@ -198,6 +198,8 @@ module OpenC3
|
|
198
198
|
tf.close
|
199
199
|
plugin_txt_path = tf.path
|
200
200
|
variables = plugin_hash['variables']
|
201
|
+
variables ||= {}
|
202
|
+
variables['scope'] = scope
|
201
203
|
if File.exist?(plugin_txt_path)
|
202
204
|
parser = OpenC3::ConfigParser.new("https://openc3.com")
|
203
205
|
|
@@ -60,8 +60,8 @@ module OpenC3
|
|
60
60
|
# Setup secrets for microservice
|
61
61
|
secrets = microservice_config["secrets"]
|
62
62
|
if secrets
|
63
|
-
secrets.each do |type, secret_name, env_name_or_path|
|
64
|
-
secret_value = @secrets.get(secret_name, scope: scope)
|
63
|
+
secrets.each do |type, secret_name, env_name_or_path, secret_store|
|
64
|
+
secret_value = @secrets.get(secret_name, secret_store: secret_store, scope: scope)
|
65
65
|
if secret_value
|
66
66
|
case type
|
67
67
|
when 'ENV'
|
@@ -21,11 +21,11 @@ require 'openc3/utilities/secrets'
|
|
21
21
|
|
22
22
|
module OpenC3
|
23
23
|
class RedisSecrets < Secrets
|
24
|
-
def keys(scope:)
|
24
|
+
def keys(secret_store: nil, scope:)
|
25
25
|
SecretModel.names(scope: scope)
|
26
26
|
end
|
27
27
|
|
28
|
-
def get(key, scope:)
|
28
|
+
def get(key, secret_store: nil, scope:)
|
29
29
|
data = SecretModel.get(name: key, scope: scope)
|
30
30
|
if data
|
31
31
|
return data['value']
|
@@ -34,11 +34,11 @@ module OpenC3
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
def set(key, value, scope:)
|
37
|
+
def set(key, value, secret_store: nil, scope:)
|
38
38
|
SecretModel.set( {name: key, value: value.to_s }, scope: scope)
|
39
39
|
end
|
40
40
|
|
41
|
-
def delete(key, scope:)
|
41
|
+
def delete(key, secret_store: nil, scope:)
|
42
42
|
model = SecretModel.get_model(name: key, scope: scope)
|
43
43
|
model.destroy if model
|
44
44
|
end
|
@@ -31,24 +31,24 @@ module OpenC3
|
|
31
31
|
klass.new
|
32
32
|
end
|
33
33
|
|
34
|
-
def keys(scope:)
|
34
|
+
def keys(secret_store: nil, scope:)
|
35
35
|
raise NotImplementedError, "#{self.class} has not implemented method '#{__method__}'"
|
36
36
|
end
|
37
37
|
|
38
|
-
def get(key, scope:)
|
38
|
+
def get(key, secret_store: nil, scope:)
|
39
39
|
return @local_secrets[key]
|
40
40
|
end
|
41
41
|
|
42
|
-
def set(key, value, scope:)
|
42
|
+
def set(key, value, secret_store: nil, scope:)
|
43
43
|
raise NotImplementedError, "#{self.class} has not implemented method '#{__method__}'"
|
44
44
|
end
|
45
45
|
|
46
|
-
def delete(key, scope:)
|
46
|
+
def delete(key, secret_store: nil, scope:)
|
47
47
|
raise NotImplementedError, "#{self.class} has not implemented method '#{__method__}'"
|
48
48
|
end
|
49
49
|
|
50
50
|
def setup(secrets)
|
51
|
-
secrets.each do |type, key, data|
|
51
|
+
secrets.each do |type, key, data, secret_store|
|
52
52
|
case type
|
53
53
|
when 'ENV'
|
54
54
|
@local_secrets[key] = ENV[data]
|
data/lib/openc3/version.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# encoding: ascii-8bit
|
2
2
|
|
3
|
-
OPENC3_VERSION = '5.5.
|
3
|
+
OPENC3_VERSION = '5.5.1'
|
4
4
|
module OpenC3
|
5
5
|
module Version
|
6
6
|
MAJOR = '5'
|
7
7
|
MINOR = '5'
|
8
|
-
PATCH = '
|
8
|
+
PATCH = '1'
|
9
9
|
OTHER = ''
|
10
|
-
BUILD = '
|
10
|
+
BUILD = 'a1e84e1850e06f2c01726e03372e2872137b3852'
|
11
11
|
end
|
12
|
-
VERSION = '5.5.
|
13
|
-
GEM_VERSION = '5.5.
|
12
|
+
VERSION = '5.5.1'
|
13
|
+
GEM_VERSION = '5.5.1'
|
14
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openc3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.5.
|
4
|
+
version: 5.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Melton
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-02-
|
12
|
+
date: 2023-02-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -692,6 +692,8 @@ files:
|
|
692
692
|
- bin/openc3cli
|
693
693
|
- bin/rubysloc
|
694
694
|
- data/config/_array_params.yaml
|
695
|
+
- data/config/_canvas_values.yaml
|
696
|
+
- data/config/_graph_params.yaml
|
695
697
|
- data/config/_id_items.yaml
|
696
698
|
- data/config/_id_params.yaml
|
697
699
|
- data/config/_interfaces.yaml
|
@@ -700,6 +702,7 @@ files:
|
|
700
702
|
- data/config/command.yaml
|
701
703
|
- data/config/command_modifiers.yaml
|
702
704
|
- data/config/command_telemetry.yaml
|
705
|
+
- data/config/graph_settings.yaml
|
703
706
|
- data/config/interface_modifiers.yaml
|
704
707
|
- data/config/item_modifiers.yaml
|
705
708
|
- data/config/microservice.yaml
|
@@ -708,6 +711,7 @@ files:
|
|
708
711
|
- data/config/plugins.yaml
|
709
712
|
- data/config/protocols.yaml
|
710
713
|
- data/config/screen.yaml
|
714
|
+
- data/config/settings.yaml
|
711
715
|
- data/config/table_manager.yaml
|
712
716
|
- data/config/table_parameter_modifiers.yaml
|
713
717
|
- data/config/target.yaml
|
@@ -899,7 +903,6 @@ files:
|
|
899
903
|
- lib/openc3/models/timeline_model.rb
|
900
904
|
- lib/openc3/models/tool_config_model.rb
|
901
905
|
- lib/openc3/models/tool_model.rb
|
902
|
-
- lib/openc3/models/traefik_model.rb
|
903
906
|
- lib/openc3/models/trigger_group_model.rb
|
904
907
|
- lib/openc3/models/trigger_model.rb
|
905
908
|
- lib/openc3/models/widget_model.rb
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# encoding: ascii-8bit
|
2
|
-
|
3
|
-
# Copyright 2023 OpenC3, Inc.
|
4
|
-
# All Rights Reserved.
|
5
|
-
#
|
6
|
-
# This program is free software; you can modify and/or redistribute it
|
7
|
-
# under the terms of the GNU Affero General Public License
|
8
|
-
# as published by the Free Software Foundation; version 3 with
|
9
|
-
# attribution addendums as found in the LICENSE.txt
|
10
|
-
#
|
11
|
-
# This program is distributed in the hope that it will be useful,
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
-
# GNU Affero General Public License for more details.
|
15
|
-
#
|
16
|
-
# This file may also be used under the terms of a commercial license
|
17
|
-
# if purchased from OpenC3, Inc.
|
18
|
-
|
19
|
-
require 'openc3/utilities/store'
|
20
|
-
|
21
|
-
module OpenC3
|
22
|
-
class TraefikModel
|
23
|
-
def self.register_route(microservice_name:, port:, prefix:, priority: 20)
|
24
|
-
prefix = '/' + prefix unless prefix[0] == '/'
|
25
|
-
if ENV['KUBERNETES_SERVICE_HOST']
|
26
|
-
url = "http://#{microservice_name.gsub('__', '-')}:#{port}"
|
27
|
-
else
|
28
|
-
url = "http://openc3-operator:#{port}"
|
29
|
-
end
|
30
|
-
service_name = microservice_name
|
31
|
-
router_name = microservice_name
|
32
|
-
Store.set("traefik/http/services/#{service_name}/loadbalancer/servers/0/url", url)
|
33
|
-
Store.set("traefik/http/routers/#{router_name}/service", service_name)
|
34
|
-
Store.set("traefik/http/routers/#{router_name}/priority", priority)
|
35
|
-
Store.set("traefik/http/routers/#{router_name}/rule", "PathPrefix(`#{prefix}`)")
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.unregister_route(microservice_name:)
|
39
|
-
service_name = microservice_name
|
40
|
-
router_name = microservice_name
|
41
|
-
Store.del("traefik/http/routers/#{router_name}/rule")
|
42
|
-
Store.del("traefik/http/routers/#{router_name}/priority")
|
43
|
-
Store.del("traefik/http/routers/#{router_name}/service")
|
44
|
-
Store.del("traefik/http/services/#{service_name}/loadbalancer/servers/0/url")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|