forked from Fijxu/invidious
Config: Also reload env variables
This commit is contained in:
parent
6f10a7c67e
commit
486c5845cd
2 changed files with 46 additions and 8 deletions
|
@ -66,11 +66,11 @@ Signal::HUP.trap do
|
||||||
end
|
end
|
||||||
|
|
||||||
{% if flag?(:linux) %}
|
{% if flag?(:linux) %}
|
||||||
if CONFIG.reload_config_automatically
|
if CONFIG.reload_config_automatically
|
||||||
Inotify.watch("config/config.yml") do |event|
|
Inotify.watch("config/config.yml") do |event|
|
||||||
Config.reload
|
Config.reload
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
{% end %}
|
{% end %}
|
||||||
|
|
||||||
HMAC_KEY = CONFIG.hmac_key
|
HMAC_KEY = CONFIG.hmac_key
|
||||||
|
|
|
@ -184,7 +184,7 @@ class Config
|
||||||
|
|
||||||
# External videoplayback proxies list. They should include `https://`
|
# External videoplayback proxies list. They should include `https://`
|
||||||
# at the start of the URI
|
# at the start of the URI
|
||||||
property external_videoplayback_proxy : Array(String) = [] of String
|
property external_videoplayback_proxy : Array(NamedTuple(url: String, balance: Bool)) = [] of NamedTuple(url: String, balance: Bool)
|
||||||
|
|
||||||
# Job to refresh tokens from a Redis compatible DB
|
# Job to refresh tokens from a Redis compatible DB
|
||||||
property refresh_tokens : Bool = true
|
property refresh_tokens : Bool = true
|
||||||
|
@ -192,11 +192,10 @@ class Config
|
||||||
property pubsub_domain : String = ""
|
property pubsub_domain : String = ""
|
||||||
|
|
||||||
property ignore_user_tokens : Bool = false
|
property ignore_user_tokens : Bool = false
|
||||||
|
|
||||||
{% if flag?(:linux) %}
|
|
||||||
property reload_config_automatically : Bool = true
|
|
||||||
{% end %}
|
|
||||||
|
|
||||||
|
{% if flag?(:linux) %}
|
||||||
|
property reload_config_automatically : Bool = true
|
||||||
|
{% end %}
|
||||||
|
|
||||||
def disabled?(option)
|
def disabled?(option)
|
||||||
case disabled = CONFIG.disable_proxy
|
case disabled = CONFIG.disable_proxy
|
||||||
|
@ -218,18 +217,57 @@ class Config
|
||||||
# Load config from file or YAML string env var
|
# Load config from file or YAML string env var
|
||||||
env_config_file = "INVIDIOUS_CONFIG_FILE"
|
env_config_file = "INVIDIOUS_CONFIG_FILE"
|
||||||
env_config_yaml = "INVIDIOUS_CONFIG"
|
env_config_yaml = "INVIDIOUS_CONFIG"
|
||||||
|
|
||||||
config_file = ENV.has_key?(env_config_file) ? ENV.fetch(env_config_file) : "config/config.yml"
|
config_file = ENV.has_key?(env_config_file) ? ENV.fetch(env_config_file) : "config/config.yml"
|
||||||
config_yaml = ENV.has_key?(env_config_yaml) ? ENV.fetch(env_config_yaml) : File.read(config_file)
|
config_yaml = ENV.has_key?(env_config_yaml) ? ENV.fetch(env_config_yaml) : File.read(config_file)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
config = Config.from_yaml(config_yaml)
|
config = Config.from_yaml(config_yaml)
|
||||||
rescue ex
|
rescue ex
|
||||||
LOGGER.error("Config: Error when reloading configuration: '#{ex.message}'")
|
LOGGER.error("Config: Error when reloading configuration: '#{ex.message}'")
|
||||||
config = CONFIG
|
config = CONFIG
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# TODO: Preserve old config and don't exit on fail
|
||||||
{% for ivar in Config.instance_vars %}
|
{% for ivar in Config.instance_vars %}
|
||||||
CONFIG.{{ivar}} = config.{{ivar}}
|
CONFIG.{{ivar}} = config.{{ivar}}
|
||||||
|
{% env_id = "INVIDIOUS_#{ivar.id.upcase}" %}
|
||||||
|
|
||||||
|
if ENV.has_key?({{env_id}})
|
||||||
|
env_value = ENV.fetch({{env_id}})
|
||||||
|
success = false
|
||||||
|
|
||||||
|
# Use YAML converter if specified
|
||||||
|
{% ann = ivar.annotation(::YAML::Field) %}
|
||||||
|
{% if ann && ann[:converter] %}
|
||||||
|
CONFIG.{{ivar.id}} = {{ann[:converter]}}.from_yaml(YAML::ParseContext.new, YAML::Nodes.parse(ENV.fetch({{env_id}})).nodes[0])
|
||||||
|
success = true
|
||||||
|
|
||||||
|
# Use regular YAML parser otherwise
|
||||||
|
{% else %}
|
||||||
|
{% ivar_types = ivar.type.union? ? ivar.type.union_types : [ivar.type] %}
|
||||||
|
# Sort types to avoid parsing nulls and numbers as strings
|
||||||
|
{% ivar_types = ivar_types.sort_by { |ivar_type| ivar_type == Nil ? 0 : ivar_type == Int32 ? 1 : 2 } %}
|
||||||
|
{{ivar_types}}.each do |ivar_type|
|
||||||
|
if !success
|
||||||
|
begin
|
||||||
|
CONFIG.{{ivar.id}} = ivar_type.from_yaml(env_value)
|
||||||
|
success = true
|
||||||
|
rescue
|
||||||
|
# nop
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
{% end %}
|
||||||
|
|
||||||
|
# Exit on fail
|
||||||
|
if !success
|
||||||
|
LOGGER.error("Config: Error when reloading environment variables for the configuration, exiting (fixme!)")
|
||||||
|
exit(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
{% end %}
|
{% end %}
|
||||||
LOGGER.info("Config: Reload successfull")
|
LOGGER.info("Config: Reload successfull")
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.load
|
def self.load
|
||||||
|
|
Loading…
Add table
Reference in a new issue