Module: RSMP::Supervisor::Modules::Configuration

Included in:
RSMP::Supervisor
Defined in:
lib/rsmp/node/supervisor/modules/configuration.rb

Overview

Handles supervisor configuration and site settings

Instance Method Summary collapse

Instance Method Details

#check_site_sxlsObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rsmp/node/supervisor/modules/configuration.rb', line 32

def check_site_sxls
  sites = @supervisor_settings['sites'].clone || {}
  sites['default'] = @supervisor_settings['default']
  sites.each do |site_id, settings|
    raise RSMP::ConfigurationError, "Configuration for site '#{site_id}' is empty" unless settings

    sxls = settings['sxls']
    raise RSMP::ConfigurationError, "Configuration error for site '#{site_id}': No SXLs specified" unless sxls

    sxls.each do |sxl|
      name = sxl['name']
      if name.to_s == 'core'
        raise RSMP::ConfigurationError,
              "Configuration error for site '#{site_id}': SXL name cannot be core"
      end

      RSMP::Schema.find_schema! name, sxl['version'], lenient: true
    end
  rescue RSMP::Schema::UnknownSchemaError => e
    raise RSMP::ConfigurationError, "Configuration error for site '#{site_id}': #{e}"
  end
end

#denormalize_site_sxls(settings) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/rsmp/node/supervisor/modules/configuration.rb', line 23

def denormalize_site_sxls(settings)
  sxls = settings['sxls']
  return settings unless sxls.is_a?(Array)

  settings.merge(
    'sxls' => sxls.to_h { |sxl| [sxl['name'], sxl['version']] }
  )
end

#denormalize_supervisor_sxls(settings) ⇒ Object



14
15
16
17
18
19
20
21
# File 'lib/rsmp/node/supervisor/modules/configuration.rb', line 14

def denormalize_supervisor_sxls(settings)
  settings = settings.merge('default' => denormalize_site_sxls(settings['default'])) if settings['default']
  return settings unless settings['sites']

  settings.merge(
    'sites' => settings['sites'].transform_values { |site_settings| denormalize_site_sxls(site_settings) }
  )
end

#handle_supervisor_settings(supervisor_settings) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/rsmp/node/supervisor/modules/configuration.rb', line 6

def handle_supervisor_settings(supervisor_settings)
  supervisor_settings = denormalize_supervisor_sxls(supervisor_settings || {})
  options = RSMP::Supervisor::Options.new(supervisor_settings || {})
  @supervisor_settings = options.to_h
  @core_version = @supervisor_settings.dig('default', 'core_version')
  check_site_sxls
end

#ip_to_site_settings(ip) ⇒ Object



66
67
68
# File 'lib/rsmp/node/supervisor/modules/configuration.rb', line 66

def ip_to_site_settings(ip)
  @supervisor_settings['sites'][ip] || @supervisor_settings['sites']['default']
end

#site_id_to_site_setting(site_id) ⇒ Object



55
56
57
58
59
60
61
62
63
64
# File 'lib/rsmp/node/supervisor/modules/configuration.rb', line 55

def site_id_to_site_setting(site_id)
  base = @supervisor_settings['default'] || {}

  return base unless @supervisor_settings['sites']

  site_specific = @supervisor_settings['sites'][site_id] || @supervisor_settings['sites']['default']
  return base unless site_specific

  base.deep_merge(site_specific)
end